【问题标题】:Passing function and function argument in .on('click') event handler? [duplicate]在 .on('click') 事件处理程序中传递函数和函数参数? [复制]
【发布时间】:2016-03-14 15:48:22
【问题描述】:

当我点击按钮时,它会显示Bruce Wayne is Batman。在 jQuery 的最后一行中,对于“click”函数,如果我传递参数“guy”,则 jQuery 不会运行,但如果我不传递参数,我会得到 undefined。我究竟做错了什么?提前致谢。

$("div").on('click', 'button', click(guy));

jsFiddle链接,HTML和JS如下。

https://jsfiddle.net/wrj5w1Lk/

<div>
    <button>
        Click Me! Click Me!
    </button>
    <p>Hello</p>
</div>
$(document).ready(function() {
    var Person = function(first, last, secret) {
        this.first = first;
        this.last = last;
        this.secret = secret;
    }

    var guy = new Person("Bruce", "Wayne", "Batman");
    var click = function(person) {
        $(this).closest('div').find('p').text(person.first + " " + person.last + " is " + person.secret);
    };

    $("div").on('click', 'button', click(guy));
});

【问题讨论】:

  • 在您提出新问题之前请user the search
  • 会的。有点太激动了,并没有想到要搜索论坛。

标签: javascript jquery html


【解决方案1】:

您有两个问题,首先您需要将对click() 的调用包装在一个匿名函数中。其次,您需要将当前 button 元素的引用传递给您的 click() 函数。试试这个:

var click = function($element, person) {
    $element.closest('div').find('p').text(person.first + " " + person.last + " is " + person.secret);
};

$("div").on('click', 'button', function() {
    click($(this), guy);
});

Updated fiddle

【讨论】:

  • guy 不是字符串,它是在 javascript 中定义的。
  • @KarlGjertsen 你是对的,我的错。答案已更新。
  • 你的答案是第一个发布的,所以我删除了我的。
  • 如果您使用.on() 函数的可选[data] 参数,您可以完全避免调用第二个函数。无论哪种方式,它仍然有效。 +1 :)
  • 没问题,很高兴为您提供帮助。注意$element只是我定义的一个变量名,没什么特别的。前置$ 只是为了表明该变量包含一个jQuery 对象。
【解决方案2】:

我认为您正在寻找的是如何使用.on() 将自定义数据传递给事件处理程序。该链接引用了.on() 函数的可选[ data ] 对象。这允许您将常规event 数据之外的自定义数据传递给您的事件处理程序以进行进一步处理。示例如下:

$(document).ready(function() {
    var Person = function(first, last, secret) {
        this.first = first;
        this.last = last;
        this.secret = secret;
    }

    var guy = new Person("Bruce", "Wayne", "Batman");
    var click = function(event) {
        $(this).closest('div').find('p').text(event.data.first + " " + event.data.last + " is " + event.data.secret);
    };

    $("div").on('click', 'button', guy, click);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    <button>
        Click Me! Click Me!
    </button>
    <p>Hello</p>
</div>

我已根据您的问题编辑了您的 sn-p,以使用这种传递数据的方法。您的自定义对象在回调的event.data 对象中传递。通过访问 event.data.[first,last,secret],您可以在回调中引用 Person(...) 对象的属性。

【讨论】:

  • 谢谢!...我还没有讨论过“事件”,所以这对我来说是全新的。但我会阅读更多关于它的内容。非常感谢。
  • 问题,事件只是常规参数还是特殊的 javascript/jquery 语法?并提前非常感谢
猜你喜欢
  • 2016-06-23
  • 1970-01-01
  • 2017-09-17
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多