2012-09-28 29 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');