2010-11-12 61 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