2010-02-03 19 views
0

有一些疼痛與此事件,我有這樣的一些代碼下拉下拉文本框和之間的差異:asp.net MVC:onchange事件

return helper.DropDownList(data.ModelEntityId.ToString(), selectList, "<Select>", new { onChange = onChange }); 

其中的onChange是含有一個JavaScript功能來運行的可變,這很好。然而,使用文本框版本(如下)時,頁面加載時觸發onchange事件(與DropdownList不同,不同的行爲很煩人)。當javascript函數被調用頁面加載的時間,我得到的錯誤:的JavaScript「未定義」找不到...(它的工作原理,然後隨後)

return helper.TextBox(data.ModelEntity.ModelEntityId.ToString(), data.ValueText, new { onchange = onChange }); 

例的JavaScript

function SuitabilityChecked(providerId, checkId, parentId) { 
      alert("meep"); // just to test error still occurs 
     }; 

有沒有我應該爲一個文本框使用不同的事件,什麼「特殊我需要做什麼?

回答

4

你可以完全避免這個問題,通過運用你的處理程序在頁面加載完成後不顯眼(不內聯)。在MVC中這樣做的標準方式是使用jQuery。

<script type="text/javascript"> 
    $(function() { 
     $('input#<%= data.ModelEntity.ModelEntityId %>').change(function() { 
       ... 
     }); 
    }); 
</script> 

使用類將使其更容易處理程序只適用於某些元素,如果需要的話 - 只有類定義添加到htmlAttributes哈希的助手,並在裝載的處理程序改變選擇應用將處理程序更改爲僅具有所選類的元素。

+0

這項工作如何考慮我的內聯聲明是動態的? (onChange變量從數據庫中加載) 我想我的jquery將不得不通過我的onChange表循環並應用上面的行... – 2010-02-03 19:55:03

+0

或者您可以簡單地生成一個使用switch語句選擇調用正確的處理程序(可能使用專門的幫助程序構建)並將相同的處理程序應用於所有處理程序。 – tvanfosson 2010-02-03 20:06:32

+0

好吧,試圖讓基本工作,我不能得到變化事件發生(我得到了蜂鳴警報,但沒有meep 2)... jQuery(document).ready(function(){ alert(「 ('meep「); $('input#67')。change(function(){ alert(」meep 2「); }); }); – 2010-02-03 22:35:22