以下代码将一个复选框和一个标签添加到调用节点.
我的问题在于label.click函数.无论何时单击标签,我都想更改匹配复选框的状态.然而,会发生的事情是复选框始终未选中.出于调试目的,我现在总是明确地将其设置为选中.
当我用firebug逐步执行代码时,我看到复选框被检查,然后,当离开函数时,它再次被取消选中.
有任何想法吗?
jQuery.fn.AddEndOrStartWith = function(selected, id, action) { var checkBox = $(''); checkBox.attr("id", id + action); checkBox.addClass(action + "CheckBox"); checkBox.attr("for", id); var label = $(''); label.attr("for", id + action); if (selected) { checkBox.attr("checked", "checked"); label.addClass("lockerClosed"); } else { label.addClass("lockerOpen"); } $(this).append(label); $(this).append(checkBox); label.click(function() { /*alert(checkBox.attr("checked"));*/ checkBox.attr("checked", "checked"); /*return true;*/ /*alert(checkBox.attr("checked"));*/ }); }
chaos.. 5
您需要阻止标签单击处理程序中的默认操作.认为这应该这样做:
label.click(function() { checkBox.attr("checked", "checked"); return false; });
发生的事情是因为您的标签设置for
正确引用了复选框,点击它时的默认操作是切换复选框.
虽然,嗯,如果你正在尝试用你的点击处理程序,我想你甚至可能都不会使用点击处理程序.但我不确定是否是这种情况.
您需要阻止标签单击处理程序中的默认操作.认为这应该这样做:
label.click(function() { checkBox.attr("checked", "checked"); return false; });
发生的事情是因为您的标签设置for
正确引用了复选框,点击它时的默认操作是切换复选框.
虽然,嗯,如果你正在尝试用你的点击处理程序,我想你甚至可能都不会使用点击处理程序.但我不确定是否是这种情况.