флажок построения jquery - не может установить проверенное значение - PullRequest
3 голосов
/ 19 марта 2010

это кажется достаточно простым, я не знаю, это ошибка или просто что-то я делаю неправильно.

То, что я хочу сделать, это создать входной флажок в jquery, а затем вернуть строку ввода. У меня есть этот код:

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

Независимо от того, как я пытаюсь отобразить этот объект, атрибут 'checked' никогда не выводится.

Итак, я попробовал:

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

и возвращается:

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

Я попытался установить атрибут id, без разницы. Я также пробовал это, но это не работает:

obj.attr('checked', true);

Есть ли какие-либо предложения о том, как отобразить входной тег с установленным атрибутом 'checked' (посредством jquery)?

Я понимаю, что могу просто сделать это с помощью конкатенации строк, но теперь я действительно хочу знать, почему это не работает так, как должно.

EDIT

Вы можете попробовать это сами в firebug. Создайте объект obj либо my way, либо cletus 'way, а затем попытайтесь отобразить его в строку. Вы обнаружите, что атрибут «checked» никогда не отображается.

Ответы [ 4 ]

3 голосов
/ 19 марта 2010

Это работает для меня:

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

Протестировано в FF 3.6, Chrome 4 и IE 8 (compat).

2 голосов
/ 19 марта 2010

Вы правы, есть некоторая странность с атрибутом "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!

Я знаю, что это на самом деле не "ответ", но хотел сообщить, что вы не сходите с ума Мне также было бы интересно узнать, почему это так.

Удачи!

0 голосов
/ 19 марта 2010

Единственный способ, которым я знаю об этом, позволит вам вернуть весь HTML-объект в виде строки, используя трюк externalHTML:

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

Тогда просто

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

Даст вам полную строку.

0 голосов
/ 19 марта 2010

Вы пробовали только

obj.attr('checked');

Не пытался быть шутливым. Просто искренне хотел узнать, что-нибудь для него.

Полагаю, вы правы в этом. Я просто никогда не задумывался об этом, потому что в jQuery есть встроенный обходной путь в селекторе :checked, поэтому это никогда не было проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...