2013-12-07 49 views
10

我在完成網站後遇到了這個問題,因爲我必須在基於ajax的頁面中實現歷史記錄(這需要用html更新某些地方(其中包括帶有簡單文本的表單輸入 - 這就是問題所在 - 他們沒有得到他們的值分配,因爲他們的值由val()設置,而不是由attr() - lies))。難道我註定要取代從爲什麼jQuery val()函數不更新屬性'值'?

$('#xxx').val('someValue'); 

$('#xxx').attr('value', 'someValue'); 

還是有一些希望繞過這所有的JavaScript?

一個非常簡單的例子here。正如您在對話框中看到的,屬性未在html代碼中設置。

+0

你處理了什麼HTML元素?一個輸入或不同的東西(如textarea)? –

+0

是的,簡單的文本輸入。 –

+0

@AlexeiLevenkov用例子更新。 –

回答

15

它使用底層的本地element.value = 'someValue'那當然設定值的元素

element.property_to_set = 'new_value'; 

財產所以它不會更改屬性,這將是

element.setAttribute('value', 'someValue') 

這是什麼attr()在內部,而prop()更改屬性,就像val()
它改變屬性的原因是該屬性是在表單提交中使用的屬性,它通常用於將值返回到javascript中,因此,堅持使用屬性而不是屬性,因爲該屬性通常只用於設置屬性的初始值,並且稍後使用javascript更改屬性不會更新屬性,這與您正在使用的屬性相反,並且會影響所有屬性表格提交併成爲主要問題。

+0

我想我現在明白了attr/val/prop的每個功能,但是如何更改我的代碼?因爲我需要捕獲HTML代碼並在需要時將其應用。目前我的值消失:( –

+0

順便說一句,爲什麼它的行爲不同,如果輸入是'type =「hidden」'? –

+0

您可以隨時重寫val()方法來更改屬性和屬性,並在jQuery之後添加但在你自己的腳本之前,這樣它會按照它的方式工作,這裏是你怎麼做 - > http://jsfiddle.net/kZsdm/ – adeneo

相關問題