Javascript $(document).ready(function(){}jquery被调用了两次?

Javascript $(document).ready(function(){}jquery被调用了两次?,javascript,jquery,Javascript,Jquery,我是jquery新手。我编写了一个jquery函数来处理一些表单输入。我看到一个奇怪的问题,我的$(document).ready(function(){}被调用了两次 我的形式是 <form> ........... <div class="form-actions" id="saveButtons"> <button class="btn btn-primary" /><%=i18n.local

我是jquery新手。我编写了一个jquery函数来处理一些表单输入。我看到一个奇怪的问题,我的
$(document).ready(function(){}
被调用了两次

我的形式是

<form>
...........
       <div class="form-actions" id="saveButtons"> 
                    <button class="btn btn-primary" /><%=i18n.localize("save")%></button>
                    <%if(outputs.isPermitted){%><script> </script><a class="btn btn-info" id="publish_api" >Save & Publish</a>  <%}%>
                    <input type="reset" class="btn" value="<%=i18n.localize("cancel")%>" onclick="javascript:window.location.href='./'" />                                         
                </div>
            </form>

您正在嵌套事件处理程序分配,这通常是一个bug。您有:

$('#publish_api').click(function(e){
它为元素中的“click”事件建立一个处理程序。在该事件处理程序中是设置另一个事件处理程序的代码:

    $("body").on("api_saved", function(e){
        alert("calling lifecycle jag");
        // ...
可能是错误的原因是,“单击”处理程序中对
.on()
的每次调用都会附加该事件处理程序的单独副本。单击两次后,“api\u saved”事件将有两个相同的处理程序。单击5次后,将有5个处理程序,依此类推。之所以发生这种情况,是因为调用了
.on()
不会删除已注册的事件处理程序


可能正确的做法是将事件处理程序分配(用于“api_已保存”)从“单击”处理程序中移出。

你说得对。.我单击了两次以上,我的文档已准备就绪()被调用了很多次。你能给我一个代码示例来纠正这个问题吗?如果我将其移出,我如何处理按钮点击功能并提交表单?@Ratha我不知道你的意思;不清楚你想完成什么。是什么生成了“api保存”事件?代码
$(“body”)。on(“api保存”,…
为一个名为“api_saved”的事件建立一个事件处理程序。我在您的代码中没有看到任何生成这样一个事件的代码(可能是一个类似于
$(“body”)的调用。触发器(“api_saved”);
页面上没有任何代码可以触发一个名为“api_saved”的事件。(如果有,我找不到它,但是如果你把它添加到问题中会有帮助。)如果没有任何东西触发该事件,那么事件处理程序中的代码将不会被调用。因此我真的不知道发生了什么。
$('#publish_api').click(function(e){
    $("body").on("api_saved", function(e){
        alert("calling lifecycle jag");
        // ...