构建jquery复选框-can';t设置检查值

构建jquery复选框-can';t设置检查值,jquery,checkbox,Jquery,Checkbox,这似乎很简单,我不知道这是一个bug,还是我做错了什么 我要做的是在jquery中构建一个复选框输入,然后返回输入的字符串。我有以下代码: var obj = $('<input>'); obj.attr('disabled', 'disabled'); obj.attr('type', 'checkbox'); obj.attr('checked', 'checked'); // this does not work! 关于如何将checked属性设置为“checked”(通过j

这似乎很简单,我不知道这是一个bug,还是我做错了什么

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

var obj = $('<input>');
obj.attr('disabled', 'disabled');
obj.attr('type', 'checkbox');
obj.attr('checked', 'checked'); // this does not work!
关于如何将checked属性设置为“checked”(通过jquery)时呈现的输入标记,有什么建议吗

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

编辑

你可以在firebug中亲自尝试。以我的方式或cletus的方式创建obj,然后尝试将其渲染为字符串。您会发现“checked”属性从未被渲染过。

您刚才试过吗

obj.attr('checked');
不是想开玩笑。只是真心想知道这是否对他有帮助

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

这对我来说很有效:

$("<input>").attr({
  type: "checkbox",
  disabled: true,
  checked: true
}).appendTo("body");
$(“”).属性({
键入:“复选框”,
残疾人:对,,
核对:正确
}).附于(“主体”);

在FF 3.6、Chrome 4和IE 8(compat)中进行了测试。

我所知道的唯一允许您以字符串形式返回整个HTML对象的方法是使用outerHTML技巧:

jQuery.fn.outerHTML = function () {
    return $('<div>').append(this.eq(0).clone()).html();
};
jQuery.fn.outerHTML=函数(){
返回$('').append(this.eq(0.clone()).html();
};
然后,简单地说

$("<input>").attr({
  type: "checkbox",
  disabled: true,
  checked: true
}).outerHTML();
$(“”).属性({
键入:“复选框”,
残疾人:对,,
核对:正确
}).outerHTML();

将为您提供完整的字符串。

您是对的,“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!
var obj=$('');
对象属性(“禁用”、“禁用”);
obj.attr('type','checkbox');
对象属性(“已检查”、“已检查”);
var包装器=$('').append(obj);
警报(wrapper.html());//请注意,此字符串中没有选中的属性。。。
$('body')。前置词(obj);//但现在请注意,它在绘制时会被选中!
我知道这本身不是一个真正的“答案”,但我想让你知道你不会发疯。我也想知道为什么会这样


祝你好运

对象属性(“已检查”,为真);应该有用。。。也许是你的选择器造成了麻烦。你能在Firebug中测试你的选择器,看看它是否返回任何东西吗?它不工作。HTML中没有添加任何内容。很奇怪。您是否已向jq提交错误报告?尚未提交错误-现在就提交!是的,但我不想把它附加到身体上。我想返回字符串“”。。。在firebug中尝试不使用.appendTo(“body”)的代码,并尝试呈现html。@benpage只是好奇:为什么需要字符串?@benpage你说得很对。我只是在玩这个。非常奇怪。是的,返回“true”,即设置了checked值,但没有呈现为字符串。是的,它是wierd,我同意,我无法回答“为什么”,但此方法将返回一个带有checked=“checked”的输入,可能是Firebug未正确热呈现HTML的问题。否则,我看不出jQ如何解析出这些信息。
jQuery.fn.outerHTML = function () {
    return $('<div>').append(this.eq(0).clone()).html();
};
$("<input>").attr({
  type: "checkbox",
  disabled: true,
  checked: true
}).outerHTML();
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!