2012-11-25 52 views
1

我有多個文本框,每個文本框有一個相關的隱藏字段,隱藏字段的ID是與模型的ID字符串的連接(例如:「FormState25」)通過當文本框變爲隱藏標識

哪有當文本框被更改時,我傳遞隱藏字段的ID?我使用下面的代碼來檢測文本框的變化:

$("#body-content-container").on('change', 'input[type="text"]', function() { 
    $("#FormState").val('dirty'); 
}); 
+0

你想通過身份證?回到控制器? –

+0

在將表單提交給控制器之前,我想首先將隱藏字段的值(例如,從「未更改」更改爲「已修改」)使用JavaScript。 – SVI

+0

ID是否來自您的文本輸入元素?在這種情況下,它是「25」嗎? –

回答

1

您可以添加自定義屬性的文本標籤本身包含隱藏字段的ID,例如:

在查看

@Html.TextBoxFor(model => model.Name, new { HiddenFieldId = "FormState" + Model.Id }) 

這樣,當一個文本框得到改變,你可以得到的Id你已經用它來存儲任何你想要的隱藏字段,然後修改JavaScript來處理隱藏字段的ID,像這樣:

的Javascript

$("#body-content-container").on('change', 'input[type="text"]', function() { 
    var hiddenId = $(this).attr("HiddenFieldId"); 
    $("#" + hiddenId).val('dirty'); 
}); 

的JavaScript將從文本框中得到相應的隱藏字段的HiddenFieldId屬性,並改變它的值。試試這個,讓我知道..

+0

我想知道爲什麼我沒有想到這一點!這只是天才!非常感謝.. :) – SVI

1

您可以使用this引用在其上定義的匿名功能的元件,如:

$("#body-content-container").on('change', 'input[type="text"]', function() { 
    $("#FormState" + this.attr('id')).val('dirty'); 
}); 
+0

該文本框的標識不是隱藏字段的標識Id – SVI

+0

那麼,您需要以某種方式將它們綁定在一起。如果你的ID有一個標準的命名約定,那麼你應該能夠找到相關的字符串作爲子字符串。更好的是,如果要在循環中構造元素,則可以使用循環索引來構造ID。祝你好運! –

1

試試這個:

$("input[type=text]").click(function(){ 
    var hiddenId = "FormState" + $(this).attr("Id"); 
    var hiddenField = $("#" + hiddenId); 
    hiddenField.val("dirty"); 
}); 

編輯:

如果你的隱藏領域呈現在輸入框後面,那麼你可以做以下事情:

$("input[type=text]").click(function(){   
    var hiddenField = $(this).next(); 
    hiddenField.val("dirty"); 
}); 

希望這可以幫助。

+0

問題是,texbox id與隱藏字段的id不同,因爲texbox是使用TextboxFor擴展創建的,隱藏字段不是模型的屬性,因此它使用隱藏擴展名創建,因此生成的id如下所示: 'VehicleModels_56998496-6f3f-4667-9c6b-339895b67c58__Name'和'FormState25'恭敬地爲文本框和隱藏字段 – SVI

+0

如何在隱藏字段之前的文本框?這也有更低的搜索元素的時間複雜度! –

+0

是輸入框和隱藏順序的順序嗎? –

0

這是我以前用過的另一個技巧。將兩個相關的輸入字段包含在div(或其他)元素中。然後使用文本字段和隱藏字段是兄弟的事實來選擇正確的隱藏字段。也許是這樣的(注:我沒有測試過這個例子):

<div id="someId"> 
    <input type="hidden" value="unchanged" /> 
    <input type="text" value="some data" /> 
</div> 

<script type="text/javascript"> 
    var hiddenInput = $('#someId input:first') 
    var textInput = $('#someId input:last') 

    textInput.on('change', function() { 
    hiddenInput.val('modified'); 
    }); 
</script>