【问题标题】:Click Handler can't find the target button点击Handler找不到目标按钮
【发布时间】:2015-02-18 19:50:37
【问题描述】:

当我单击按钮时,我使用了单击处理程序来执行请求。 当按钮位于 滑块之外时,此事件可以正常工作。 如果我在 slider 应用点击事件。 我尝试了很多方法让它工作,但仍然不明白是什么原因造成的。

像 jquery 步骤这样的 jquery 脚本会影响另一个 jquery 脚本吗?

HTML:

<div id="main">
<div id="slider">

    <h3>1</h3>
    <section>
        <p id="head">I'm using JQuerySteps.</p>
        <p id="body"><button type="button">Here is the button.</button></p>
    </section>

</div>
</div>

jQuery:

$("button").click(function(){

    $("#main").load("get.php", function(responseTxt, statusTxt, xhr){

    });

});

问题: 当我尝试在 jquery 步骤 (#slider) 中单击按钮时,单击处理程序不起作用。

我确信这个问题听起来很愚蠢,但我会很感激任何简短的建议或提示。 谢谢你,弗拉基米尔。

【问题讨论】:

  • 1) 不太清楚这在什么方面不起作用,您能详细说明一下吗? 2)不确定这是问题还是只是观察,但是一旦.load() 执行,它将删除所有按钮单击处理程序。如果要像这样动态删除/添加元素,您可能希望将点击处理程序附加到 document 并使用 .on() 过滤 button
  • 滑块没有附加点击事件?可能是第一次点击事件启动,而不是第二次
  • 刚刚更新了这个问题,谢谢大卫,我会研究这个,我只是需要一些点来调查它。
  • 我会检查一下,耶稣,谢谢。
  • 我认为您可能将事件绑定到不可用的元素。试试这个:$("#slider").on('click', 'button', function(){...your function stuff here

标签: jquery html ajax event-handling jquery-steps


【解决方案1】:

这将在匹配的元素上创建一个点击处理程序:

$("button").click(function(){
    // ...
});

但是,这将从 DOM 中删除该元素(我假设将其替换为另一个类似的元素?):

$("#main").load();

原来的button 现在不见了,它的点击处理程序也不见了。因此,单击新按钮将不会执行任何操作,因为它没有处理程序。

不要将处理程序直接附加到(短暂的)button,而是将其附加到公共父元素并在 button 上进行过滤。像这样的:

$(document).on('click', '#body button', (function(){
    // ...
});

这样处理程序本身就被附加到一个不变的元素(在这种情况下document,尽管任何不变的分层父元素都可以),所以处理函数不会丢失。这称为event delegation

【讨论】:

  • 这个工作的人!我会跳一段小舞,做一些笔记,然后继续这个项目。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多