0

我的 index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    <script src="jquery.js"></script>
    <script>
     $(function(){
       $("button").click(function(){
         $("div").load("AJAX_page.php");
       });
       $("span").on("click",function(){alert("This function is necessary")})   
     });
    </script>
  </head>
  <body>
   <button>LOAD</button>
   <span>Click on me After clicking on button</span>
   <div></div>
  </body>
</html>

还有我的 AJAX_page.php

<body>
<script>
$(function() {
    $("span").on("click", hello);

    function hello() {
        alert("hi");
    }
});
</script>
</body>

现在我的问题是

  1. 首先当你点击按钮,然后如果你点击跨度它会提醒你好这个功能是必要的

  2. 再次,如果您单击按钮,它将提醒您好此功能是必要的2 次

  3. 再次,如果你点击按钮,它会提醒你好这个功能是必要的3 次,依此类推

现在我希望它只提醒这个功能是必要的,并且 无论点击多少次按钮都只需要一次你好?

4

2 回答 2

3

通常你取消绑定之前绑定的事件处理程序:

$("span").off('click', hello).on('click', hello);

这不适用于您的情况,因为在每次评估 JavaScript 代码时,hello都会创建一个新函数,该函数与您之前绑定的实例不同。

但一切都没有丢失:您可以使用命名空间事件[docs]来仅取消绑定特定的处理程序:

$("span").off('click.foo').on('click.foo', hello)

或者尽可能只加载其他代码一次。

于 2012-07-11T12:17:26.483 回答
0

每次单击按钮时都会运行 AJAX_page.php 文件中的脚本,这意味着每次单击按钮时它都会附加一个新的事件处理程序。

大概您在此处提供的代码是您真正想要做的事情的抽象,所以我不知道您是否真的需要该按钮来运行 AJAX_page.php 中的脚本每次单击或仅一次。如果您只需要一次,则使用 ; 将点击处理程序附加到按钮上$("button").one("click", function() { ... })。这将在您第一次按下按钮后取消绑定处理程序,以便跨度在您第一次按下按钮时获得其 onclick 事件,但在随后按下按钮时不会发生任何事情。

如果 AJAX_page.php 文件将在不同时间从服务器返回不同的内容,并且跨度上的警报应在按下按钮时更新,则您需要取消绑定先前附加的处理程序,如先前的答案所示。('foo' 可以是任何你想要的字符串来标识这个点击事件,而不是同一元素上的其他点击事件;对于这个例子来说,'hello' 可能更容易记忆。)

于 2012-07-11T12:27:53.397 回答