2010-03-19 99 views
3

這看起來很直截了當,我不知道這是一個錯誤,還是隻是我做錯了什麼。建設jquery複選框 - 無法設置檢查值

我想要做的是在jQuery中構建一個複選框輸入,然後返回輸入的字符串。我有這樣的代碼:

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

不管我怎麼努力使這個OBJ的「檢查」屬性永遠不會被輸出。

所以我曾嘗試:

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

,並返回:

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

我已經嘗試設置一個id屬性,這都沒有區別。我也試過,但它不工作:

obj.attr('checked', true); 

如何讓與(通過jQuery)設置爲「檢查」被選中屬性渲染輸入標籤有什麼建議?

我意識到我可以用字符串連接來做到這一點,但現在我真的想知道爲什麼它不按照它應該的方式工作。

編輯

你可以在Firebug試試這個自己。按照我的方式創建obj或者cletus'的方式,然後嘗試將其渲染爲字符串。你會發現'checked'屬性永遠不會被渲染。

+0

它是在一個

+0

obj.attr('checked',true);應該工作......也許這是你的選擇者造成麻煩。你可以在Firebug中測試你的選擇器,看看它是否返回任何東西? –

+0

它不起作用。沒有任何內容添加到HTML中。很奇怪。你有沒有向jq提交錯誤報告? – dclowd9901

回答

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! 

我知道這是不是一個真正的「答案」本身,而是想讓你知道你不會堅果。我也很想知道爲什麼會出現這種情況。

祝你好運!

0

你有沒有嘗試過

obj.attr('checked'); 

並不想成爲滑稽。只是真心想知道它是否爲他做了什麼。

我想你說得對。我從來沒有想過,因爲jQuery在:checked選擇器中有一個內置的解決方法,所以它從來都不是問題。

+0

是的,返回'真',即檢查值設置,但它不會呈現爲字符串。 – benpage

+0

附帶原創評論。 – dclowd9901

3

這個工作對我來說:

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

測試在FF 3.6,Chrome 4的和IE 8(COMPAT)。

+0

是的,但我不想將它附加到身體。我想返回一個字符串''...在沒有.appendTo(「body」)的情況下嘗試在螢火蟲中的代碼,並嘗試獲取html渲染。 – benpage

+0

@benpage只是好奇:你爲什麼要這個字符串? – cletus

+0

@benpage你說得很對。我一直在玩這個。 *很奇怪。 – cletus

0

我所知道的唯一的方法可以讓你返回一個字符串,將使用outerHTML招完整的HTML對象:

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

然後,只需

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

威爾給你完整的字符串。

+0

是的,它很奇怪,我同意,我不能回答'爲什麼',但這種方法將返回一個輸入與檢查=「檢查」 – Ray

+0

也許這是一個與Firebug沒有熱渲染HTML正確的問題。否則,我看不出jQ如何解析出這些信息。 – dclowd9901