我使用jQuery Uniform来设置输入/选择等样式。但是,复选框已停止工作。我是从ajax调用发送的appending
数据。加载后,我使用$.uniform.update("input:checkbox")
更新新的html。尝试(取消)检查输入时,它只能工作一次。如果我想(再)检查它,它根本不会改变。
我尝试更改Uniform Javascript,以便所有操作(例如click
,focus
,blur
等)都在.live
函数下。 (即.live("click",
)。这只会阻止任何工作。
更新
我完全阅读了Uniform JS并发现了一个问题:
if(!$(elem).attr("checked")){
//box was just unchecked, uncheck span
spanTag.removeClass(options.checkedClass);
}else{
//box was just checked, check span.
spanTag.addClass(options.checkedClass);
}
.attr("checked")
语法失败。它总是会返回false。为什么?我不知道。除此之外,它不会更新原始input
以删除checked
属性或设置checked
属性。
我浏览了官方网站,发现它没有更新复选框输入。所以这不仅仅是我xP
我用Google搜索了一下,发现了各种方法来检查是否选中了复选框但是以下方法失败了:
if ($(elem).attr("checked")) // The original.
if ($(elem).attr("checked") == true)
if ($(elem).is(":checked"))
if ($(elem).checked)
// and:
var check = $(elem).match(/checked=/);
if (check == null)
非常感谢指导词〜:3
答案 0 :(得分:57)
这是因为如果您需要动态更改表单上的值,UniformJs
要求您更新统一元素的修改:
$('#checkbox').prop('checked',true);
$.uniform.update();
如果您只想更新#checkbox
:
$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');
答案 1 :(得分:18)
这样做:
$('#checkbox').prop('checked',true).uniform('refresh');
答案 2 :(得分:7)
我知道这可能有点晚了,但希望它会对某人有所帮助。我不得不在统一代码中添加几行,以便查找预先选中的复选框。对于我,此代码从第262行开始。我使用的是统一版本1.7.5。 “添加约翰”笔记之间的界限就是我添加的内容。
"click.uniform touchend.uniform": function(){
if(!$(elem).attr("checked")){
//box was just unchecked, uncheck span
spanTag.removeClass(options.checkedClass);
// Added by John to look for checkboxes with the attr "checked" that have been click to uncheck
}else if(!$(elem).is(':checked')){
spanTag.removeClass(options.checkedClass);
// end addition by john
}else{
//box was just checked, check span.
spanTag.addClass(options.checkedClass);
}
},
答案 3 :(得分:2)
jQuery 1.6.4改变了attr()
函数的含义,jquery.uniform.js使用了该函数。 attr()
现在返回页面加载时属性WAS的状态 - 而不是属性的状态现在是什么。有一个名为prop()
的替换函数,它执行attr()
以前的工作。
要修复插件,请将每个attr("checked")
替换为prop("checked")
。另外,将attr("disabled")
更改为prop("disabled")
。
那应该修复你的项目。它对我有用; - )
另请参阅:https://github.com/pixelmatrix/uniform/pull/167,它尝试以更好的向后兼容性解决问题。
答案 4 :(得分:2)
已经有一段时间,但我遇到了同样的问题,但我通过一个简单的解决方案解决了这个问题。
Uniform在复选框上添加span
,如果选中或不选中,则为其提供类checked
,但仅限于页面加载。如果您在页面已加载时选中或取消选中该复选框,它将取消选中(或检查),但由于span
已结束,您将看到它未更新,您必须手动执行此操作。
$('#myDiv input[type=checkbox]').attr('checked',true);
$('#myDiv input[type=checkbox]').parent().addClass('checked');
或
$('#myDiv input[type=checkbox]').attr('checked',false);
$('#myDiv input[type=checkbox]').parent().removeClass('checked');
可能不是最干净的解决方案,但在每个浏览器上都能正常工作。
答案 5 :(得分:1)
我相信最新版本的Jquery使用不同的方法来评估:检查值。使用较旧的版本(虽然不理想)为我解决了这个问题。不久之前,PixelMatrix似乎还没有更新Uniform。
答案 6 :(得分:0)
你不能使用像
这样的东西$("#checkbox").attr("checked", "true");
选中复选框,然后
$("#checkbox").removeAttr("checked");
取消选中它?
答案 7 :(得分:0)
您无需将.attr()
更改为.prop()
:
"click.uniform touchend.uniform": function(){
if(!$(elem).attr('checked')){
//box was just unchecked, uncheck span
spanTag.removeClass(options.checkedClass);
//Added by PingOn
$(elem).removeAttr('checked');
//end addition by PingOn
// Added by John
}else if(!$(elem).is(':checked')){
spanTag.removeClass(options.checkedClass);
// end addition by john
//Added by PingOn
$(elem).removeAttr('checked');
//end addition by PingOn
}else{
//box was just checked, check span.
spanTag.addClass(options.checkedClass);
//Added by PingOn
$(elem).attr('checked','true');
//end addition by PingOn
}