[英]$(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.