为不同元素上的两个不同事件运行相同的事件处理程序

时间:2014-10-28 20:13:03

标签: javascript jquery

说我有一个带有字段和提交按钮的表单。

我希望在发生任何动作(点击或更改)时运行相同的功能。

目前我已经设置了这种方式:

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

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

然而,这似乎多次触发//做东西部分。有没有更好的方法,或者其他地方可能出现问题?

4 个答案:

答案 0 :(得分:1)

如果您的事件处理程序不需要处于.forminput的上下文中(即它根本不使用$(this)),那么您可以创建一个用于他们两个:

function clickChangeHandler(){
    // do stuff
}

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

答案 1 :(得分:1)

您可以创建一个将为您想要的事件调用的函数。例如:

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

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

答案 2 :(得分:1)

两种情况都可以使用一个eventHandler。 如果您需要区分事件,可以使用事件参数以不同方式处理它们

function eventHandler (event) {}

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

$(".forminput").change(eventHandler);

答案 3 :(得分:0)

以下应该是更好的方法,应该防止您的代码多次触发。

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