2009-11-18 101 views
4

希望能從你們那裏得到一點幫助。jQuery檢測窗體變化

在檢測表單是否發生變化時使用此腳本。如果是這樣,當我點擊某個類的href鏈接時,會彈出一個確認窗口。

var formChanged = false; 

$(document).ready(function() { 

$('#my_form input[type=text].editable, #my_form textarea.editable').each(function (i) { 
    $(this).data('initial_value', $(this).val()); 
}); 

$('#my_form input[type=text].editable, #my_form textarea.editable').keyup(function() { 
    if ($(this).val() != $(this).data('initial_value')) { 
     handleFormChanged(); 
} 
}); 

$('#my_form .editable').bind('change paste', function() { 
    handleFormChanged(); 
}); 

$('.navigation_link').bind("click", function() { 
    return confirmNavigation(); 
}); 
}); 

function handleFormChanged() { 
$('#save_or_update').removeAttr('disabled'); 
formChanged = true; 
} 

function confirmNavigation() { 
if (formChanged) { 
     return confirm('Are you sure? Your changes will be lost!'); 
} else { 
     return true; 
} 
} 

一切工作正常,除了當我有一個buttonclick插入一個div鏈接使用jQuery像這樣(做鏈接「可見」):

$("button").click(function() { 
    var dylink = "<a href='#' class='navigation_link'>dynammic link</a>"; 
    $("#tester").html(dylink); 
}); 

確認畫面不如果我編輯表單然後點擊「動態鏈接」彈出。 其他鏈接完美。任何想法可能是什麼?

這是HTML代碼

<div><button>Show link</button></div> 
<div id="tester"></div> 
<div><a href="#" class="navigation_link">permanent link</a></div> 
<form action="" method="get" id="my_form"> 
<input type="text" class="editable"> 
<input type="button" name="button" id="save_or_update" value="Submit" disabled="disabled" /> 
</form> 

感謝 /A

回答

2

其他答案暗示了它,但明確地說,這是做什麼。

更改此:

$('.navigation_link').bind("click", function() { 
    return confirmNavigation(); 
}); 
}); 

這樣:

$('.navigation_link').live("click", function() { 
    return confirmNavigation(); 
}); 
}); 
2
$("button").live("click",function() { 
    var dylink = "<a href='#' class='navigation_link'>dynammic link</a>"; 
    $("#tester").html(dylink); 
}); 
+0

感謝您的快速回答,但我不得到那個工作。 – Keat 2009-11-18 17:42:31

3

更改對象的innerHTML(這是當你使用.html(...)會發生什麼)可能會迫使瀏覽器重新創建某些對象。新創建的對象可能沒有綁定您的事件偵聽器。因此,您應該考慮使用而不是.bind(...)代替所有更改事件。有關更多信息,請參閱關於.live的jQuery文檔。

+0

嘿!這工作完美。非常感謝。將閱讀更多關於.live。 Btw。這是檢查表單是否已更改的好方法,以便在離開頁面之前可以獲得確認窗口?我在網上找到了這個腳本,當我來到js/jQuery時,我是一個初學者。 – Keat 2009-11-18 17:49:37

+0

@Andreas:夠好的。你可以用#my_form input [type = text] .editable,#my_form textarea.editable'來代替'#my_form .editable'來優化它,而不是綁定到'keyup'或'paste'就綁定到'change '。你會得到更少(更簡單)的代碼,並達到相同的效果。 – 2009-11-18 18:39:40

+0

非常感謝。一切現在完美。 – Keat 2009-11-19 12:36:58