【问题标题】:building jquery checkbox - can't set checked value构建 jquery 复选框 - 无法设置选中值
【发布时间】:2010-03-19 01:04:51
【问题描述】:

这看起来很简单,我不知道这是一个错误,还是我做错了什么。

我要做的是在 jquery 中构建一个复选框输入,然后返回输入的字符串。我有这个代码:

var obj = $('<input>');
obj.attr('disabled', 'disabled');
obj.attr('type', 'checkbox');
obj.attr('checked', 'checked'); // this does not work!

无论我如何尝试渲染这个 obj,'checked' 属性永远不会被输出。

所以我试过了:

$('<div>').append(obj).remove().html();

然后它返回:

<input type="checkbox" disabled="disabled" />

我已经尝试设置一个 id 属性,它没有任何区别。我也试过这个,但它不起作用:

obj.attr('checked', true);

有什么建议可以让输入标签的checked属性设置为'checked'(通过jquery)?

我意识到我可以通过字符串连接来做到这一点,但现在我真的很想知道为什么它没有按应有的方式工作。

编辑

您可以在 firebug 中自己尝试一下。以我的方式或 cletus' 的方式创建 obj,然后尝试将其呈现为字符串。你会发现 'checked' 属性永远不会被渲染。

【问题讨论】:

  • obj.attr('checked', true);应该可以工作...也许是您的选择器造成了麻烦。你能在 Firebug 中测试你的选择器,看看它是否返回任何东西吗?
  • 它不起作用。没有向 HTML 添加任何内容。很奇怪。您是否向 jq 提交了错误报告?
  • 尚未提交错误 - 现在将提交!

标签: jquery checkbox


【解决方案1】:

这对我有用:

$("<input>").attr({
  type: "checkbox",
  disabled: true,
  checked: true
}).appendTo("body");

在 FF 3.6、Chrome 4 和 IE 8(兼容)中测试。

【讨论】:

  • 是的,但我不想将它附加到正文中。我想返回一个字符串''...在没有.appendTo("body")的情况下在firebug中尝试你的代码,并尝试获取html渲染。
  • @benpage 只是好奇:你为什么要这个字符串?
  • @benpage 你说得对。我一直在玩这个。 非常很奇怪。
【解决方案2】:

你是对的,“checked”属性有些奇怪。好像只有在浏览器实际渲染后才生效。 (而不是仅仅在一个片段中。)

例如,使用您的代码,

var obj = $('<input />');
obj.attr('disabled', 'disabled');
obj.attr('type', 'checkbox');
obj.attr('checked', 'checked');
var wrapper = $('<div />').append(obj);
alert(wrapper.html());       // notice, no checked attr in this string...
$('body').prepend(obj);      // but now notice, it IS checked when it's drawn!

我知道这本身并不是真正的“答案”,但想让您知道您不会发疯。我也很想知道为什么会这样。

祝你好运!

【讨论】:

    【解决方案3】:

    据我所知,唯一可以让您将整个 HTML 对象作为字符串返回的方法是使用 outerHTML 技巧:

    jQuery.fn.outerHTML = function () {
        return $('<div>').append(this.eq(0).clone()).html();
    };
    

    那么,简单

    $("<input>").attr({
      type: "checkbox",
      disabled: true,
      checked: true
    }).outerHTML();
    

    会给你完整的字符串。

    【讨论】:

    • 是的,这很奇怪,我同意,而且我无法回答“为什么”,但是此方法将返回带有 check="checked" 的输入
    • 可能是 Firebug 没有正确热渲染 HTML 的问题。否则,我看不出 jQ 是如何解析出这些信息的。
    【解决方案4】:

    你试过了吗

    obj.attr('checked');
    

    并不想开玩笑。只是真的想知道它是否对他有任何帮助。

    我想你是对的。我从来没有考虑过,因为 jQuery 在:checked 选择器中有一个内置的解决方法,所以它从来都不是问题。

    【讨论】:

    • 是,返回'true',即设置了检查值,但它不会呈现为字符串..
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2014-09-06
    • 2018-01-27
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多