2013-04-09 45 views
2

我正在使用敲除,并尝试更改复选框的值时,我单击父div。这很好用,但是现在当我实际点击复选框时,我无法改变复选框的值...复选框后的范围用于调试,以查看变量设置为的内容。我尝试使用clickBubble:false,但这似乎也没有帮助。更改父div的复选框值单击

我有以下映射:

var mapping = { 
     'teams': { 
      create: function(options) { 
       options.data.active=ko.observable(false); 
       options.data.flipActive= function(team, event){ 
        if(!$(event.target).hasClass('team_checkbox')) 
         team.active(!team.active()); 
       } 
       return options.data; 
      } 
     } 
    } 

和下面的HTML:

  <div id="selectTeamsArea" data-bind="foreach: teams"> 
       <div class="teams_result_data" data-bind="click: flipActive, clickBubble: false"> 
        <img class="floatLeft" height="40" width="40" data-bind="attr: {src: searchImgLink}" > 
        <div> 
         <p data-bind="text: searchBoldName"></p> 
         <p data-bind="text: searchThirdLine"></p> 
        </div> 
        <input class="right team_checkbox" type="checkbox" name="teams" data-bind="value: idString, checked: active, clickBubble: false" /> 
        <span data-bind="text: active"></span> 
       </div> 
       <div class="clear"></div> 
      </div> 

任何帮助是极大的赞赏。

更新,收录的jsfiddle:http://jsfiddle.net/YYUed/

^即使您注释掉“flipActive”的内部结构的复选框不工作的权利。

+0

有什么方法可以简单地将复选框从div中取出 - 然后使用css和样式来获得所需的外观? – PatrickSteele 2013-04-10 01:55:42

+0

是的,我可以做到这一点,这将解决问题,但我真的讨厌“黑客”的CSS,因为我总是遇到跨浏览器问题。 – seePatCode 2013-04-10 12:18:05

回答

2

我认为最好的办法是将<div>替换为<label>,将<input>(仍然)作为<label>的子元素。这种方法不仅更具语义和可访问性,但其优点是点击<label>将与点击复选框本身的效果相同。

+0

你能解释一下这将如何解决这个问题吗?我在上面添加了一个jsfiddle,并将div切换为标签并不能修复它。 – seePatCode 2013-04-10 15:05:48

+2

如果你把复选框放在一个'

+0

真棒,我只是添加显示:块,以便它看起来相同:http://jsfiddle.net/cmpt6/1/ – seePatCode 2013-04-10 16:38:39