33

我正在使用jQuery Uniform来设置输入/选择等样式。但是,该复选框已停止工作。我是appending从 ajax 调用发送的数据。加载后,我会使用它$.uniform.update("input:checkbox")来更新新的 html。当尝试(取消)检查输入时,它只工作一次。如果我想(取消)再次检查它,它根本不会改变。

我尝试更改统一 Javascript,以便所有操作(即clickfocusblur)都在.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

我用谷歌搜索了一下,发现了各种检查复选框是否被选中的方法,但是以下方法失败了:

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

4

8 回答 8

64

简单的解决方案

这是因为UniformJs如果您需要动态更改表单上的值,则需要您更新对统一元素的修改:

$('#checkbox').prop('checked',true);
$.uniform.update();

编辑

如果您想更新#checkbox唯一的:

$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');
于 2013-05-13T07:16:24.073 回答
28

只需这样做:

$('#checkbox').prop('checked',true).uniform('refresh');
于 2015-01-25T13:37:42.743 回答
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);
      }
    },
于 2011-09-08T17:53:56.043 回答
3

已经有一段时间了,但我遇到了同样的问题,但我通过一个简单的解决方案解决了它。

Uniformspan在复选框上添加一个,并在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');

可能不是最干净的解决方案,但在每个浏览器上都可以正常工作。

于 2013-01-30T19:08:09.660 回答
2

jQuery 1.6.4 改变了attr()函数的含义,由 jquery.uniform.js 使用。 attr()现在返回页面加载时属性所处的状态 - 而不是现在属性的状态。有一个名为 的替换函数prop(),它完成了attr()过去所做的工作。

要修复插件,请将每个出现的地方替换attr("checked")prop("checked"). 此外,更改attr("disabled")prop("disabled").

那应该可以解决您的项目。它对我有用;-)

另请参阅:https ://github.com/pixelmatrix/uniform/pull/167 ,它试图通过更好的向后兼容性来解决该问题。

于 2011-10-19T03:40:59.947 回答
1

我相信最新版本的 Jquery 使用不同的方法来评估 :checked 值。使用稍旧的版本(虽然不理想)为我解决了这个问题。不过那是不久前的事了,PixelMatrix 似乎仍然没有更新 Uniform。

于 2011-09-26T10:20:20.260 回答
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
      }
于 2012-08-10T01:24:36.423 回答
0

你不能使用类似的东西

$("#checkbox").attr("checked", "true");

使复选框被选中,并且

$("#checkbox").removeAttr("checked");

取消选中它?

于 2011-07-09T21:57:03.600 回答