2014-10-28 68 views
1

假設我有一個帶有字段和提交按鈕的表單。爲不同元素上的兩個不同事件運行相同的事件處理程序

我希望在發生任何操作(單擊或更改)時運行相同的函數。

目前我已經將它設置了這種方式:

$("#btn-search").click(function() { 
    $(".forminput").change(); 
}); 

$(".forminput").change(function() { 
    //do stuff 
}); 

不過,這似乎給//做的東西的一部分多次射擊。有沒有更好的方法來做到這一點,還是其他地方可能存在的問題?

+0

您是否正在更改.change功能中的任何值?我可以看到這可能導致某種重複的變化循環 – grdaneault 2014-10-28 20:16:01

回答

0

下應該有更好的方法,並應防止你的代碼發射多次。

function doStuff(e) { 
    e.stopImmediatePropagation(); 
    // do stuff 
} 
$('.forminput').on('change', doStuff); 
$('#btn-search').on('click', doStuff); 
1

如果你的事件處理程序不需要的.forminput上下文是(即不使用$(this)在所有),那麼你可以創建一個函數的使用對他們倆的:

function clickChangeHandler(){ 
    // do stuff 
} 

$("#btn-search").click(clickChangeHandler); 
$(".forminput").change(clickChangeHandler); 
1

你可以創建一個函數,這個函數將被調用你想要的事件。例如:

$('#one').click(foo); 
$('#two').change(foo); 

function foo(){ 
    // do stuff... this and $(this) are also usable. 
} 
1

對於這兩種情況,您都可以使用一個eventHandler。 在情況下,如果你需要區分事件,你可以使用事件參數來處理它們不同

function eventHandler (event) {} 

$("#btn-search").click(eventHandler); 

$(".forminput").change(eventHandler); 
相關問題