2014-10-31 2 views
0

У меня есть форма поиска db с несколькими полями. Два из них, job_id и job_desc, я хочу быть отключенным, когда используется другой, и наоборот. Для этого я написал небольшую функцию Javascript.Как сбросить событие oninput() html после первого использования?

Вот мой код формы:

<input type="text" id="job_id" oninput="input('job_id','job_desc')" onblur="blur('job_id','job_desc')"> 
<textarea id="job_desc" oninput="input('job_desc','job_id')" onblur="blur('job_desc','job_id')"></textarea> 

Вот мой Javascript код:

function input(a,b) 
    { 
    var a = document.getElementById(a); 
    var b = document.getElementById(b); 
    alert("This will disable "+b); // Let the user know we are disabling the other field 
    b.value = ""; // Empty the other field 
    b.disabled = true; // Disable the other field 
    } 

function blur(a,b) 
    { 
    var a = document.getElementById(a); 
    var b = document.getElementById(b); 
    if(a.value = "") // If the field is empty... 
     { 
     b.disabled = false; // Enable the other field. 
     } 
    } 

У меня есть эти проблемы:

1) По какой-то причине моего второе поле не повторно -enable, как только первое поле пустое и размытое. Это заставляет меня думать, что событие onblur() не работает.

2) Как только я напечатаю текст, я получаю предупреждение один раз, и все хорошо. Однако, когда я опустошаю поле и повторно вводим какой-либо текст, предупреждение не запускается во второй раз. Как сбросить событие oninput()?

Вот моя скрипка: fiddle

+1

Просто FYI, это не работает в скрипку, потому что вы должны изменить настройки на «No Wrap - в » (теперь вы получите 'ReferenceError: вход не defined' потому что скрипт выполняется onload). – pawel

ответ

2

Вы можете использовать "OnKeyUp" событие вместо других событий:

HTML-код будет выглядеть так:

<input id="job_id" onkeyup="input('job_id','job_desc')"> 
<br> 
<textarea id="job_desc" onkeyup="input('job_desc','job_id')"></textarea> 

И JS funciton:

function input(a, b) { 
     var ea = document.getElementById(a); // We put A in a variable 
     var eb = document.getElementById(b); // We put B in a variable 
     if(ea.value != ""){ // If the element have a value/text in it 
      if(!eb.disabled) // we check if the other element is disabled, if not, we trigger the alert 
       alert("This will disable " + b); // Let the user know we are disabling the other field 

      eb.value = ""; // Empty the other field 
      eb.disabled = true; // Disable the other field 
     }else{ // if the element's value is empty (which means that we have erased the existing value) 
      alert(b + " is now enabled"); // Let the user know we are enabling the other field 
      eb.disabled = false; // We re-enable the field 
     } 
    } 

Это будет нормально работать во всех браузерах .. Надеюсь, это вам поможет!

+0

Как мы можем сделать так, чтобы предупреждение не запускалось с каждым введенным символом? –

+0

Проверьте правильность ответа –

+0

Это не совсем то, что я имел в виду, но он отлично работает, и это действительно важно. Последнее, не могли бы вы добавить некоторые комментарии, чтобы я понял, как проблема была решена? –

1

Помимо предлагаемого решения причина, по которой ваш код не работал, противоречит native blur() function on the window object, и поэтому ваш вызов blur вызывал это вместо вашей собственной функции blur. Вам нужно изменить его название.

Другой вопрос, как только вы исправить это в

if(a.value = "") // If the field is empty... 

он должен иметь два = знаков для сравнения.

if(a.value == "") // If the field is empty... 

Demo в http://jsfiddle.net/q11m3ahz/6/

Смежные вопросы