2010-11-12 37 views
1

使用jQuery,我通過某個進程更改了輸入文本字段的值。完成該過程後,我需要捕獲此更改並將其應用於另一個進程。我的問題是,我似乎無法捕捉到這個變化並將其分配給一個變量。我知道這些更改正在發生,因爲DOM正在更新。此外,這個變量賦值在IE中可用,但不適用於我測試過的其他瀏覽器。jQuery - DOM操作的結果不能分配給變量?

下面是一個片段來證明我的觀點(你可以在這裏看到這個在線:http://jsfiddle.net/xMwAE/)。

<form> 
    <input type="hidden" name="my_hidden" value="Hidden Field" /> 
    <input type="text" name="my_text" value="Text Field" /> 
</form> 


$().ready(function() { 
    $('input[name=my_hidden]').val('Hello Hidden Field'); 
    $('input[name=my_text]').val('Hello Text Field'); 

    // Display 
    var temp = $('form').html(); 

    // Though the DOM is updated with the new values. The variable temp 
    // does not capture the changes to the input text field, but captures 
    // the change in the hidden field. When in IE, temp captures the 
    // changes in both fields. 
    alert(temp); 
}); 

顯然,我需要跨瀏覽器的一致行爲。任何想法發生了什麼?

回答

1

我不t得到任何可信的想法會發生什麼,但不知何故將值設置爲成員(input.value)或將該值設置爲屬性節點應該有所不同。

這個工作對我來說:

$('input[name=my_text]').each(function()   
{ this.setAttribute('value','Hello Text Field');}); 

我想它的一個錯誤的innerHTML,看到Bugzilla的:https://bugzilla.mozilla.org/show_bug.cgi?id=535992

+0

你是一個天才!似乎工作,現在已經掙扎了好幾天。所以我必須使用setAttribute酷!非常感謝!啤酒?大聲笑 – Aman 2010-11-12 16:06:30

+0

啤酒聽起來不錯^^ – 2010-11-13 14:51:10

0

或者,您也可以將您的字段的值存儲到數組和使用,但是你喜歡這樣:

var data = []; 
$('form :input').each(function(){ 
    data.push(this.value); 
}); 

現在,您可以檢查值是這樣的:

alert(data[0]); 
alert(data[1]); 
+0

我也有興趣在周圍的標記。你知道爲什麼這隻適用於隱藏的領域? – Aman 2010-11-12 07:16:07

+0

@aman:適用於所有輸入字段,而不僅僅是隱藏字段。如果你想讓它只適用於隱藏字段,你應該使用'$('form:hidden')'代替。 – Sarfraz 2010-11-12 07:24:06

+0

沒有我的意思是我希望html結構可以存儲在一個JavaScript變量以及它的新值中。問題是這不適用於隱藏的其他字段 – Aman 2010-11-12 07:31:49

相關問題