2014-10-27 2 views
0

Почему предупреждение отображается только при последнем событии? Моя цель - сделать все входные события. Благодарю.Обнаружение события ввода с двумя элементами Id в одном jsp

Это mycode:

$(document).off('keyup').on('keyup','#main',function(e){ 
    if(e.keyCode == 13) alert("enter on main input"); 
    }); 

    $(document).off('keyup').on('keyup','#other1',function(e){ 
    if(e.keyCode == 13) alert("enter on other input"); 
    }); 

посмотреть FIDDLE для демо

ответ

2

вы удаляете обработчик KeyUp сразу после добавления. Это, в сущности, что вы делаете сейчас ...

$(document).off('keyup'); 

$(document).on('keyup','#main',function(e){ 
    if(e.keyCode == 13) alert("enter on main input"); 
}); 

$(document).off('keyup'); // this removes the event handler you just created 

$(document).on('keyup','#other1',function(e){ 
    if(e.keyCode == 13) alert("enter on other input"); 
}); 

Split код так это понятнее, что происходит, как это ...

$(document).off('keyup'); 

$(document).on('keyup','#main',function(e){ 
    if(e.keyCode == 13) alert("enter on main input"); 
}); 

$(document).on('keyup','#other1',function(e){ 
    if(e.keyCode == 13) alert("enter on other input"); 
}); 

или вы можете приковать все это как это ...

$(document) 
    .off('keyup'); 
    .on('keyup','#main',function(e){ 
     if(e.keyCode == 13) alert("enter on main input"); 
    }); 
    .on('keyup','#other1',function(e){ 
     if(e.keyCode == 13) alert("enter on other input"); 
    }); 

это имеет преимущество только создания объекта JQuery для документа один раз, а не в 3 раза выше.

2

Ну, вы используете .off('keyup'), который отменяет предыдущее связывание события keyup, поэтому связан только последний обработчик событий.

Просто удалите .off('keyup')

1

Как указано в других ответах, когда вы используете метод выключения на обработчик события KeyUp вы удаляете все предыдущие привязок по этому событию. Разделение кода, по-видимому, является лучшим выбором для данного конкретного вопроса, но другим способом решения вашей проблемы является использование пространств имен.

$(document).off('keyup.main').on('keyup.main','#main',function(e){ 
    if(e.keyCode == 13) alert("enter on main input"); 
}); 

$(document).off('keyup.other1').on('keyup.other1','#other1',function(e){ 
    if(e.keyCode == 13) alert("enter on other input"); 
}); 
Смежные вопросы