1

我正在使用 jquery 将事件绑定到几个按钮...

$(".numField").bind("click", stageButtonClick());

在函数stageButtonClick()中,我想获取调用按钮的对象,但我不能$(this)在函数内部使用stageButtonClick,它不会为我返回任何东西。

另外,请不要建议使用内联函数

$(".numField").bind("click", function() {...})

我想学习如何做到这一点。

4

4 回答 4

2

你的问题在这里:

$(".numField").bind("click", stageButtonClick());
                       don't use parenthesis ^^

分配命名函数时不要使用括号,因为它会调用函数并分配结果。

这有效:

演示

$(document).ready(function(){

    $(".numField").bind("click", stageButtonClick);

});

function stageButtonClick()
{
     alert( $(this).attr("id") );  
}
于 2012-12-14T22:48:19.097 回答
1

您正在尝试以非常非 jQuery 的方式做事。即使您不希望整个函数内联,您也可以通过执行以下操作让您的生活更轻松:

$(".numField").bind("click", function() {
    stageButtonClick(this); // or stageButtonClick($(this)) if you want to pass jQuery selector
});

在这里,您只需将单击的 DOM 元素传递给您的stageButtonClick()函数。

此外,如果您使用的是 jQuery 1.7 或更高版本,则应该on()使用bind().

于 2012-12-14T22:46:31.813 回答
1

起初,$(".numField").bind("click", stageButtonClick());不会工作,因为stageButtonClick()返回函数的结果stageButtonClick,而不是函数本身

其次,将一个event对象传递给带有targetandcurrentTarget元素的被调用函数。通常情况下,event.currentTarget将是.numField

因此,尝试使用$(".numField").bind("click", stageButtonClick);,您通常可以使用$(this)$(event.currentTarget)

于 2012-12-14T22:49:58.767 回答
1

如果是这种情况,您可以使用event object

$(".numField").bind("click", stageButtonClick);

function stageButtonClick(e){
   // You can just use 
         **this**
   OR
       **$(e.target)**
}

.on()还使用而不是绑定事件,.bind()因为后者已被前者取代

$(".numField").on("click", stageButtonClick);
于 2012-12-14T22:52:08.070 回答