2014-09-05 70 views
0

应用程序包括Jquery 1.9.1,undescore.js和jquery plagin dataTables。复选框模糊行为

我的复选框被包裹如下:

<label style="top: 3px; position: relative;" class="checkbox" id="IsSpreadCheckBox"> 
    <input type="checkbox" name="IsSpread" id="IsSpread"> 
    <span></span> 
</label> 

label.checkbox跨度具有背景图像对于每种情况:选中,未选中禁用。

它的Jquery onclick处理程序:

$(".checkbox span").click(function() { 
    var backgroundContainer = $(this); //span with background image 
    var checkbox = backgroundContainer.parent().find("input[type='checkbox']"); //hidden checkbox itself 

    if (!backgroundContainer.hasClass("disabled")) { 
     if (backgroundContainer.hasClass("checked")) { 
      checkbox.removeAttr('checked').prop("checked", false); 
      //Also tried checkbox.removeAttr('checked') or checkbox.prop("checked", false); 

      backgroundContainer.removeClass("checked"); 
     } 
     else { 
      checkbox.attr('checked', 'checked').prop("checked", true); 
      //checkbox.attr('checked', 'checked') or checkbox.prop("checked", true); 

      backgroundContainer.addClass("checked"); 
     } 
    } 
}); 

而且我有一些代码,使这个元素,如果需要的页面加载后停用。

虽然调试工作和隐藏复选框元素被选中或取消选中正确(复选框图像是正确的)。此外,该工作在目标浏览器精细IE 10(服务器端接收正确的复选框值),但在我与萤火火狐29而在形式调试提交我看到:

$("#IsSpread").attr("checked") // checked 
$("#IsSpread").prop("checked") // false 

和服务器总是收到false

对此元素的属性更改进行调试时不提供任何内容。

如果以编程方式使得它在的$(document)检查。就绪()它总是发送真正条件。

谢谢!

+1

'backgroundContainer'已经是一个jQuery对象,因此您可以使用它而不是执行'$(backgroundContainer)'。你怎么隐藏复选框? – Pete 2014-09-05 08:58:25

+0

看看[fiddle](http://jsfiddle.net/yrvcLsu9/)。这是你想要的吗?它看起来像'.prop'只在选择元素时才起作用。重新选择元素后,'.prop'更改会丢失。 – Regent 2014-09-05 09:50:10

+0

和[更新的小提琴](http://jsfiddle.net/yrvcLsu9/1/)与“发送”按钮。通过“元素被选中”,我的意思是选择'var element = $('...')',改变'element'属性,然后再次选择元素不具有这些属性。 – Regent 2014-09-05 09:55:46

回答

0

Fiddle使用.attr()

if (backgroundContainer.hasClass("checked")) 
{ 
    checkbox.removeAttr('checked'); 
} 
else 
{ 
    checkbox.attr('checked', 'checked'); 
} 

及更高版本:

$('#send').click(function() 
{ 
    var checked = $('#IsSpread').attr("checked") == "checked"; 
    alert("Sending " + checked); 
}); 

Fiddle使用.prop()(实际上它是奇怪的行为,但对我的作品):

checkbox.prop('checked', checkbox.prop('checked')); 

后来:

$('#send').click(function() 
{ 
    var checked = $('#IsSpread').prop("checked"); 
    alert("Sending " + checked); 
});