2012-09-28 31 views
0

我有多個複選框的網頁(下面其中的一種代碼):複選框系列化問題

<div> 
     <label for="ViewAsWebpage"> 
      {{#if this.ViewAsWebpage}} 
       <input type="hidden" id="ViewAsWebpage" name="ViewAsWebpage" value="true"/> 
       <input id="chkViewAsWebpage" type="checkbox" class="enable-checkbox" checked /> 
      {{else}} 
       <input type="hidden" id="ViewAsWebpage" name="ViewAsWebpage" value="false"/> 
       <input id="chkViewAsWebpage" type="checkbox" class="enable-checkbox" /> 
      {{/if}} 
      <span>View as Webpage</span> 
     </label> 
    </div> 

我有一個事件處理程序,處理變化事件(所有複選框):

changeCheckboxValue: function(e) { 
      var target = this.$(e.target); 
      var id = this.$(e.target).siblings().attr('id'); 

      $(id).val(target.is(':checked') ? 'true' : 'false'); 

上述事件效果很好,並設置了真/假值。

但是,當我序列化表單(POST提交時的表單值) - 這些更新的值不會反映。有人可以讓我知道我錯過了什麼嗎?

+0

怎麼樣從你最後一個問題這個不同http://stackoverflow.com/questions/12643858/identify-which-checkbox-was-點擊? – j08691

+0

我一直在努力處理checbox,並最終在正確設置true/false值的地方運行代碼。現在的問題是序列化 – dotNetNewbie

+0

「串行化表單」是什麼意思? – charlee

回答

1

的問題是缺少#。

修正,通過改變:

$(id).val(target.is(':checked') ? 'true' : 'false'); 

$('#' + id).val(target.is(':checked') ? 'true' : 'false'); 
1

使用prop()設置檢查屬性:

$(id).prop("checked", true); 

$(id).prop("checked", false); 
1

我認爲這個問題是因爲你使用的是相同的id所有hidden領域。

讓我們來看看下面的代碼:

changeCheckboxValue: function(e) { 
    var target = this.$(e.target); // get the checkbox that is clicked 
    var id = this.$(e.target).siblings().attr('id'); // get checkbox's siblings' id 
              // so id == 'ViewAsWebpage' 
    $(id).val(target.is(':checked') ? 'true' : 'false'); // HERE!! 
       // $(id) returns all the hiddens that have id == 'ViewAsWebpage' 

因此,所有的hiddens的價值數次完全改變。他們最終都將是'真'或'假'。

我想你應該選擇這樣的隱藏字段。

changeCheckboxValue: function(e) { 
    var target = $(e.target); 
    var hidden = target.prev(); 

    hidden.val(target.is(':checked') ? 'true' : 'false');