2014-10-28 70 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); 
相关问题