【问题标题】:.click() event operating on <span>?.click() 事件在 <span> 上运行?
【发布时间】:2014-12-11 15:27:50
【问题描述】:

我想触发跨度上的点击事件,但它不起作用。我尝试了以下两种方法:

$('#my_span').click();
$('#my_span').trigger("click");

但后来我尝试了:

$('#my_span').focus();

这成功了!有人知道为什么吗?我不是想绑定一个处理程序,只是想像用户点击那个跨度一样触发点击事件。请帮忙。

【问题讨论】:

  • 如果跨度没有处理程序,点击跨度会做什么?
  • 如果您试图聚焦跨度,那么focus 将是触发的正确事件。通常,单击 span 不会执行任何操作,因为它不是真正的可单击元素,除非涉及一些 javascript。

标签: javascript jquery event-handling jquery-events


【解决方案1】:

尝试在 DOM 元素上而不是在元素的 jQuery 集合上触发 click

$('#my_span')[0].click();

或者:

document.getElementById('my_span').click();

【讨论】:

  • 这应该没什么区别,因为 jQuery 会在幕后完成所有这些工作。
【解决方案2】:

您的跨度是否包含任何信息?是 0px x 0px 元素吗?如果是这种情况,则永远不会触发点击。

例如,如果您查看 &lt;span&gt;&lt;i&gt; 中的字体很棒的图标,它将永远不会被触发,因为它没有可点击的内容。

【讨论】:

    【解决方案3】:

    //已编辑,因为我无法正确阅读^^//

    我会链接两个事件处理程序

    $(document).on("event you desire","desired target", function() {  
            $("#my_span").trigger("click");
        });
    

    然后:

    $(document).on("click","#my_span", function() {  
        //stuff to happen
    });
    

    http://jsfiddle.net/vvt8Lvvu/ - 用于演示的 jsfiddle

    【讨论】:

    • 虽然委托事件处理程序可能是件好事,但这个问题没有涉及事件处理程序...他正在尝试生成一个点击元素。
    • 是的,我没有正确阅读,但我只是觉得这是问题的一部分^^
    • 您感觉委托事件处理程序将解决以编程方式触发事件的问题?
    • 这仍然与问题无关,因为他们没有尝试处理点击,只是关注元素。如果他们的元素是动态添加的,这只会是一个解决方案,这显然不是.focus() 工作的情况:)
    • 当您只有一个而没有链接时,为什么要说“我会链接 两个 事件处理程序”?这个答案现在让我头晕目眩:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多