【问题标题】:Event Delegation -- JQuery Skips Click事件委托——JQuery 跳过点击
【发布时间】:2015-01-22 16:16:35
【问题描述】:

我正在使用加载方法向我的“容器”添加内容 [按钮和表格]。

但是,动态内容需要委托,我认为我的代码是错误的,并且不知何故让父母/孩子感到困惑。 当我加载我的页面时,我的“表格”被加载,甚至没有点击 button1。

        $(document).ready(function () {
        $("#button1").click(loadUserNameTable);
        $("#contentbox").on("click", '#table .button2', loadQuestions);

    });


function loadUserNameTable() {
        $("#contentholder").load("nametable.html");
    }
    function loadQuestions() {
        $("#contentholder").load("questions.html");
    }
    function loadPasswordChanger() {
        $("#contentholder").load("passwordchange.html");
    }
    </script>

<div id="contentholder">
<button type = "button" id="button1">Begin Password Reset</button>
</div>



 //nametable.html
<div class="table">
<table id="table1" style="margin:0 auto">
<tr>
<td>
    Enter Username: 
</td>
<td>
<input type="text" id="userName" value="" />
</td>
</tr>
<tr>  
<td>

</td>
<td>
<button id="button2" style="float: left"> Submit </button>
</td>
</tr>
</table>
</div>


//questions.html

<div class="qs" id="questions" style="margin: 0 auto">
<table style="margin: 0 auto">
    <tr>
        <td>Question 1: </td>
        <td><input type="text" /></td>
    </tr>
    <tr>
        <td>Question 2: </td>
        <td><input type="text" /></td>
    </tr>
    <tr>
        <td>
        </td>
        <td>
        <button id="button2" style="float: left"> Submit </button>
        </td>
    </tr>
   </table>
 </div>

【问题讨论】:

  • 可能是因为你打电话给loadUserNameTable()?尝试将其替换为 loadUserNameTable
  • 另外,&lt;button&gt; 元素的标记无效。它本身不是void element。应该是&lt;button&gt;InnerText&lt;/button&gt;
  • 在您提供的代码中,既没有 #contentbox 也没有 #table,也没有带有 class 的按钮 button2 只有 id button2.
  • 对不起,我应该包含我的 js 函数。 loadUserNameTable() 是我要调用的函数。
  • @Christopher,我认为您误解了 JCOC611 的评论。从函数调用中删除括号。

标签: jquery event-delegation


【解决方案1】:

您的问题很可能是因为您在任何事件发生之前执行您的功能。将您的代码更改为:

$(document).ready(function () {
    $("#button1").click(loadUserNameTable);
    $("#contentbox").on("click", '#table .button2', loadUserNameTable);
});

这是因为您在函数之后使用了括号 (),它会立即执行它(而不是在事件上)。如果你只输入你的函数名,没有括号,一旦事件发生,jQuery 将负责执行它。

【讨论】:

  • 是的,这行得通。它不再立即加载该页面。但是,我认为我仍然需要为我的代表团工作,那里的按钮仍然给我带来问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多