Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何组合不同的事件触发器_Javascript_Jquery_Events_Triggers - Fatal编程技术网

Javascript 如何组合不同的事件触发器

Javascript 如何组合不同的事件触发器,javascript,jquery,events,triggers,Javascript,Jquery,Events,Triggers,我是jQuery新手,希望有人能帮我解决这个问题 我有一个JS函数,它是由各种元素/类触发的,不同的是,对于其中一些元素/类,事件是通过点击触发的,而对于其他元素/类,事件是通过按键触发的 到目前为止,我有以下一个例子,它可以按预期工作,但我想知道是否有方法将它们结合起来,因为这里唯一的区别是触发器(单击、键控等)和避免重复代码 如果有任何其他建议写这个不同的,请让我也知道 我的jQuery(示例): $(document).on('keyup', '.calcMinus, .calcPlus'

我是jQuery新手,希望有人能帮我解决这个问题

我有一个JS函数,它是由各种元素/类触发的,不同的是,对于其中一些元素/类,事件是通过点击触发的,而对于其他元素/类,事件是通过按键触发的

到目前为止,我有以下一个例子,它可以按预期工作,但我想知道是否有方法将它们结合起来,因为这里唯一的区别是触发器(单击、键控等)和避免重复代码

如果有任何其他建议写这个不同的,请让我也知道

我的jQuery(示例):

$(document).on('keyup', '.calcMinus, .calcPlus', function(e){
    var row = $(e.target);
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    });
});
$(document).on('click', '.trAdd, .trDelete, .trDown, .trUp', function(e){
    var row = $(e.target);
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    });
});
// ...
function calculateSums(row, index){
   // do stuff
}
我的JS功能:

$(document).on('keyup', '.calcMinus, .calcPlus', function(e){
    var row = $(e.target);
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    });
});
$(document).on('click', '.trAdd, .trDelete, .trDown, .trUp', function(e){
    var row = $(e.target);
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    });
});
// ...
function calculateSums(row, index){
   // do stuff
}
多谢各位,
Mike

将代码从事件处理程序提取到函数中,并从两个现有处理程序调用该函数:

function handleEvent(row) {
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    })
}

$(document).on('keyup', '.calcMinus, .calcPlus', function(e){
    handleEvent($(e.target));
});
$(document).on('click', '.trAdd, .trDelete, .trDown, .trUp', function(e){
    handleEvent($(e.target));
});

将事件处理程序中的代码提取到函数中,并从两个现有处理程序中调用该代码:

function handleEvent(row) {
    $(row).closest('table').find('td.calcSum').each(function(index){
        calculateSums(row, index);
    })
}

$(document).on('keyup', '.calcMinus, .calcPlus', function(e){
    handleEvent($(e.target));
});
$(document).on('click', '.trAdd, .trDelete, .trDown, .trUp', function(e){
    handleEvent($(e.target));
});

如果否决票是因为
e
我纠正了我的错误answer@RoryMcCrossan,谢谢你的更正。是因为
event
不起作用吗?不是-我之所以编辑,是因为在
combined()
函数的参数列表中没有包含
e
参数。@AmmarCSE我认为
event
不会出现在每个浏览器中-最好坚持使用jQuery传递给您的一个,特别是因为它的所有信息都正常化了,等等@keewee279,你可以给它任何你想要的名字,只要它有名字,如果否决票是因为
e
I纠正了我的错误answer@RoryMcCrossan,谢谢你的更正。是因为
event
不起作用吗?不是-我之所以编辑,是因为在
combined()
函数的参数列表中没有包含
e
参数。@AmmarCSE我认为
event
不会出现在每个浏览器中-最好坚持使用jQuery传递给您的一个,特别是因为它的所有信息都正常化了,@keewee279,你可以给它取任何名字,只要它有名字。谢谢!我已经把我的函数代码分开了,只是不是全部,所以这肯定有帮助。:)谢谢你!我已经把我的函数代码分开了,只是不是全部,所以这肯定有帮助。:)