【问题标题】:Onclick, each loop and this woesOnclick,每个循环和这个问题
【发布时间】:2013-11-11 11:08:34
【问题描述】:

一直在寻找解决这个问题的方法,但很难找到。所以这里是:

我有一个 onclick 功能:

$(".div-colour-box").on("click", function () {

进入每个循环:

$("#" + componentID).children("div.div-colour-box").each(function (i) {

然后我想检查触发 onclick 函数的

是否是当前在 each 循环中迭代的项目。

然而,据我所知,在使用 jQuery 时,$(this) 更改为引用当前在每个循环中迭代的项目,并且有效地忘记哪个对象触发了 onClick 事件.

如何比较两者以查看它们是否相同?

谢谢!

【问题讨论】:

    标签: jquery loops onclick this each


    【解决方案1】:

    将初始元素保存到变量中:

    $(".div-colour-box").on("click", function () {
        var clickedOn = this;
        $("#" + componentID).children("div.div-colour-box").each(function (i, element) {
            if(element == clickedOn) {
                //...
            }
        });
    });
    

    【讨论】:

    • 不应该是e.target吗?
    • 不,e 是each 循环中当前元素的名称。也许我应该选择一个不同的名字。
    • e 是在每个循环中传递给函数的参数的通用名称。在 each 函数 (api.jquery.com/jQuery.each) 中,第一个参数是当前项的索引,第二个是迭代中的当前项。
    • 正是 :) 我现在将名称更改为 element,所以没有人将它与事件参数的通用名称混淆。
    • 可爱。工作完美。非常感谢,感谢@Snowburnt 的额外评论。也帮助我更多地理解了 .each 方法!
    【解决方案2】:

    改变:

    $(".div-colour-box").on("click", function () {
    

    $(".div-colour-box").on("click", function (e) {
    

    使用:$(e.currentTarget)获取触发点击事件的jquery对象。

    【讨论】:

    • 这不是一个好主意,因为e.targetthis 并不总是相同的。 e.currentTarget 会好很多。
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 2020-03-09
    • 2011-07-15
    • 1970-01-01
    • 2015-11-28
    • 2015-09-12
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多