簡體   English   中英

$(document).ready(function(){} jquery被調用兩次了嗎?

[英]$(document).ready(function(){} jquery is getting called twice?

我是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>

jQuery是;

<script>
    $(document).ready(function(){


    $('#publish_api').click(function(e){
        $("body").on("api_saved", function(e){
            $.ajax({
                ........
        });
        $("#manage_form").submit();
    });

</script>

單擊save and publish按鈕時,我兩次看到上述警報。 如果在填寫表單時出現任何用戶錯誤,則會發生此問題。 (也就是說,如果用戶沒有填寫必須字段,並且如果他沒有填寫該字段並嘗試單擊按鈕,那么請問是什么原因)是什么原因?

編輯; “ api-saved”事件處理程序是通過javascript之類的方法調用的; (以驗證該形式的所有參數)

var v = $("#manage_form").validate({
        submitHandler: function(form) {
        if(!validate_tiers()){
            return false;
        }

        $('#saveMessage').show();
        $('#saveButtons').hide();        
        $(form).ajaxSubmit({
            success:function(responseText, statusText, xhr, $form) {
                $('#saveMessage').hide();
                $('#saveButtons').show();                
                if (!responseText.error) {                
                    $( "body" ).trigger( "api_saved" );       
                } else {
.........

}

您正在嵌套事件處理程序分配,這通常是一個錯誤。 你有:

$('#publish_api').click(function(e){

它為元素中的“ click”事件建立處理程序。 在該事件處理程序中包含用於設置另一個事件處理程序的代碼:

    $("body").on("api_saved", function(e){
        alert("calling lifecycle jag");
        // ...

可能是錯誤的原因是,“點擊”處理程序中對.on()每次調用都將附加該事件處理程序的單獨副本。 單擊兩次后,將為“ api_saved”事件提供兩個相同的處理程序。 單擊5次后,將有5個處理程序,依此類推。 發生這種情況是因為對.on()的調用不會刪除已注冊的事件處理程序。

可能正確的做法是將事件處理程序分配(“ api_saved”的分配)移出“ click”處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM