0

现在我有这个

jQuery('.widget-prop').keyup(function() {
    var prop = jQuery(this).attr('id');
    var val = jQuery(this).val();

    stuff;
}

jQuery('.widget-prop').click(function() {
    var prop = jQuery(this).attr('id');
    var val = jQuery(this).val();

    stuff;
}

两个函数是相同的,所以我想通过定义外部函数并调用它来简化它

jQuery('.widget-prop').click('myFunction');

但是我如何将参数传递给 myFunction?

function myFunction(element) {
    stuff;
}

谢谢

4

4 回答 4

2

摆脱那些引用...

jQuery('.widget-prop').click(myFunction);
于 2012-05-21T15:04:05.513 回答
1

首先,您可以将两个处理程序合并为一个:

jQuery('.widget-prop').on('click keyup', function() {
    var prop = jQuery(this).attr('id');
    var val = jQuery(this).val();
    // stuff;
});

或者对于旧版本的 jQuery:

jQuery('.widget-prop').bind('click keyup', function() { // ... });

其次,jQuery 会自动将当前元素应用到您提供的任何函数中,因此this当您执行此操作时,关键字仍将是引发事件的元素:

jQuery('.widget-prop').on('click keyup', myHandler);

function myHandler() {
    var prop = jQuery(this).attr('id');
    var val = jQuery(this).val();
    // stuff;
}
于 2012-05-21T15:06:06.637 回答
0

在上下文中MyFunction this是您单击的元素。此外,click处理程序需要 1 个参数,因此您的函数签名应该是function MyFucntion(event)事件参数保存有关操作的数据的位置(例如event.target,被单击的元素)。

所以这就是你定义你的处理程序的方式:

function myFunction(event){
    var element = event.target;
    // Note: event.target == this
    //do stuff
}

这就是您将其绑定到事件的方式:

$(".widget-prop").click(myFunction);
于 2012-05-21T15:07:19.097 回答
0

使用.on函数而不是快捷方式.click并将所有必需的事件作为参数传递:

jQuery('.widget-prop').on('click keyup', function() {
  var prop = jQuery(this).attr('id');
  var val = jQuery(this).val();
  //stuff;
});

编辑:不推荐使用=>快捷方式

于 2012-05-21T15:07:59.973 回答