事件处理程序返回未定义?

发布于 2024-11-25 22:25:12 字数 333 浏览 2 评论 0 原文

假设我将 jQuery 单击事件的事件处理程序附加到我的对象的函数之一。但为什么它在我的属性上返回未定义?

var buttonView = {
              label   : 'underscore',
              onClick : function(){ alert('clicked: ' + this.label); },           
        };

$('#bind').bind('click', buttonView.onClick); //clicked: undefined --> why is it undefined ?

Let's say I was attaching an event handler of jQuery click event to one of the function of my objects. But why does it return undefined on my properties?

var buttonView = {
              label   : 'underscore',
              onClick : function(){ alert('clicked: ' + this.label); },           
        };

$('#bind').bind('click', buttonView.onClick); //clicked: undefined --> why is it undefined ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凉城凉梦凉人心 2024-12-02 22:25:12

在下面的 onclick 处理程序中,它指向 id 为“bind”的 dom 元素,并且它没有 label 属性。如果您有任何自定义属性作为标签,您应该使用 $(this).attr("label") 来检索它。试试这个

 function(){ alert('clicked: ' + $(this).attr("label")) };

In the below onclick handler this points to dom element with id "bind" and it do not have a label property. If you have any custom attribute as label you should use $(this).attr("label") to retreieve it. Try this

 function(){ alert('clicked: ' + $(this).attr("label")) };
鹿港巷口少年归 2024-12-02 22:25:12

您正在传递 buttonView.onClick 引用的函数,但它与 buttonView 的关联未保留

要通过 this 保留引用,您可以使用 jQuery.proxy ()[文档] 方法。

$('#bind').bind('click', $.proxy(buttonView,'onClick')); 

现在,onClick 函数中的 this 将引用您的 buttonView 对象。

实例: http://jsfiddle.net/K72qs/


或者简单地制作一个在 onClick 函数中显式引用 buttonView

onClick : function(){ alert('clicked: ' + buttonView.label); },

实例: http://jsfiddle.net/K72qs/1/

You're passing the function referenced by buttonView.onClick, but it's association with buttonView is not retained.

To retain the reference via this, you can use the jQuery.proxy()[docs] method.

$('#bind').bind('click', $.proxy(buttonView,'onClick')); 

Now this in the onClick function will refer to your buttonView object.

Live example: http://jsfiddle.net/K72qs/


Or simply make an explicit reference to buttonView in the onClick function:

onClick : function(){ alert('clicked: ' + buttonView.label); },

Live example: http://jsfiddle.net/K72qs/1/

薔薇婲 2024-12-02 22:25:12

你可以只使用:

 $('#bind')
     .data('label', 'underscore')
     .click(function() {
         alert('clicked: ' + $(this).data('label'));
     });

You could just use:

 $('#bind')
     .data('label', 'underscore')
     .click(function() {
         alert('clicked: ' + $(this).data('label'));
     });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文