2012-02-14 85 views
-1

我有一個通用外部文件document.ready()$('form').submit()操作,但是,我想從包含該文件的其中一個文件中覆蓋此操作,該文件包含document.ready()內部JQuery document.ready覆蓋外部文件

換句話說,我希望我的內部document.ready()應該在$('form').submit()工作之前對錶單執行附加檢查。

+0

好吧。但爲什麼你需要多個document.ready()。 PROTIP使用'$ .fn.ready()'它的coolkids – danwit 2012-02-14 19:55:20

回答

0

在你的內部代碼,你可以嘗試停止submit事件的直接傳播:

$(function() { 
    $('form').on('submit.immediate', function (event) { 
     event.stopImmediatePropagation(); 
    }); 
}); 

然後當你想要的形狀,以便能夠再次提交你可以刪除這個綁定:

$('form').off('submit.immediate'); 

這隻會刪除submit事件處理程序附加的immediate命名空間,所以其他綁定將保持不變。

這完全可能我不完全理解你的問題。您可能只需要綁定一個事件處理程序到停止自己的能力的形式(一個或多個)來發送,直到你決定送他們:

$(function() { 
    $('form').on('submit.immediate', function (event) { 
     event.preventDefault(); 
    }); 
}); 

event.preventDefault()將被提交停止物(S),那麼你一旦你想提交表單就可以刪除這個事件處理程序。

注意.on()/.off() jQuery中1.7和在​​上面使用的情況下是新的中的相同.bind()/.unbind()http://api.jquery.com/onhttp://api.jquery.com/off

文檔爲event.stopImmediatePropagation()

保持的其餘部分處理程序被執行並阻止事件冒泡DOM樹。

來源:http://api.jquery.com/event.stopImmediatePropagation/

+0

我看到有多種方式來完成這項任務。但是,它是一種中斷事件處理的靈活而有效的方式嗎?如果你建立你的結構來防止這種東西,那不是更好嗎?你可以使用回調或發佈和訂閱,以保持它的乾淨和可擴展 – danwit 2012-02-14 20:07:19

+0

我真的不知道你在做什麼。您需要發佈代碼以獲取更多信息。使用命名空間來綁定事件是個不錯的主意,就像我在回答中所做的一樣,所以如果需要,可以刪除特定的事件處理程序。如果你可以刪除你不想使用的事件處理程序,那麼這真的是最好的方法,否則就是打斷它的運行能力,只要你不會一次對很多元素做這件事,你就不會注意到任何性能下降。 – Jasper 2012-02-14 20:10:12

+0

很好的答案,謝謝。但即時通訊想知道你是否可以確定事件在正確的時間中斷。據我所知,你會同時發射兩個事件,一個提交一個,一個打斷。但我從來沒有聽說過提交。立即「是一個自我聲明的命名空間,還是一個在正常的'.submit()'之前觸發的jquery指令? – danwit 2012-02-14 20:20:31

0

我的做法是:

var formActions = new function() { 

    this.form = $('form'); 

    this.doStuff = function() { 

     //Do Stuff 

     //If you got more than one form 
     $.each("this.form", function(i, v) { 
      //PlayWithForm 
     }) 

     this.submit(); 
    }; 

    this.submit = function() { 

     this.form.trigger("submit"); 
    } 

} 

$.fn.ready(function() { 
    formActions.doStuff(); 
})