2011-12-20 143 views
0

我需要一些幫助我是jQuery的新手,我正在嘗試使用.change功能。所以我想要做的就是檢查一下表單中是否有值發生變化。我的應用程序有幾個母版頁,更新面板等。 (ASP.net)所以我使用的是母版頁下面的代碼:頁面刷新後jquery.change功能失敗

<asp:HiddenField ID="_Changed" runat="server" Value="false" /> 

     <script> 
      $(":input").change(function() { 
       document.getElementById('_Changed').value = "true"; 
       alert("Change occured"); 
       return false; 
      }); 
     </script> 

這適用於所有形式的幾倍,但一個形式,我真的想使用它,它只能使用一次。這種形式是唯一一個與隱藏領域交互的人。該頁面的代碼是:

<script> 
function Home_Click() { 
     var boolRetVal = false; 
     if (document.getElementById('_Changed').value == "true") { 
      if (confirm("You have unsaved data do you wish to proceed?")) { 
       boolRetVal = true; 
       document.getElementById('_Changed').value = "false"; 
      } 
     } else { 
      boolRetVal = true; 
      document.getElementById('_Changed').value = "false"; 
     } 

     return boolRetVal; 
    } 
</script> 

<asp:Button ID="btnHome" runat="server" Text="Home" OnClientClick="return Home_Click()" 
            OnClick="btnHome_Click" CausesValidation="false" /> 

所以,當有人點擊home鍵和他們點擊ok確認提示和屏幕重新加載.change查詢永遠不會再運行。我沒有收到任何JavaScript錯誤,只是再也沒有運行。

+0

我們可以說[有人點擊主頁按鈕,點擊確認提示並重新加載屏幕]。如果點擊一個鏈接,你的意思是重新加載,或者如果Ajax更改頁面的關鍵部分,則重新加載? – plauriola 2011-12-20 20:32:52

+0

您是否使用UpdatePanel刷新UI?還是回發完整回發? – 2011-12-20 20:38:56

回答

0

如果您刷新頁面並$(":input").change(...的部分只是在第一頁狀態下執行,在刷新加載的新$(":input")不會受到影響。您必須使用:

$(":input").live("change",... 

所以它綁定到所有新輸入。

+0

非常感謝。這工作完美。 – cjohns 2011-12-20 20:40:56

3

請嘗試以下(這需要jQuery的1.7+):

<script type="text/javascript"> 
    $(":input").on("change", function (e) { 
     e.preventDefault(); 
     $("#<%: _Changed.ClientID %>").val("true"); 
     alert("Change occured"); 
    }); 
</script> 
+0

我認爲<%:應該是<%=,對於.NET 4.0+,應該使用Response.Write() – 2011-12-20 20:40:51

+0

@ wes.stueve <%:來代替<%=。它確保字符串得到編碼。在不需要這種行爲的地方,<%=是後備。 – 2011-12-20 20:48:58