2014-10-27 17 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"); 
}); 

拆分代碼,以便它更清晰這是怎麼回事,是這樣的...

$(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"); 
}); 
相關問題