HTML:
<div id="fields">
<input type="text" name="someField" />
<!-- NOTE: There are some more fields here -->
</div>
<!-- NOTE: There are some more fields here -->
第一个 JS 文件:
jQuery(document).ready(function($) {
alert($('#fields input[type="text"]').val());
});
第二个 JS 文件:
jQuery(document).ready(function($) {
$('#fields input[type="text"]').val('someValue');
});
注意事项:
- JS 文件位于 head 标签内。
- 我不得不在第二个 JS 文件中设置输入值。
- 它适用于 Firefox、Opera、Chrome、Safari。
- IE7 和 IE8 返回空值。
感谢任何帮助!谢谢!
最佳答案
与其假设该值已在您的第一个“就绪”处理程序中设置,不如让它处理自定义事件,然后从第二个文件触发该事件。
第一个文件:
jQuery(function($) {
$('#fields input[type="text"]').on('value-ready', function() {
alert(this.value);
});
});
第二个文件:
jQuery(function($) {
$('#fields input[type="text"]').val("whatever").trigger('value-ready');
});
等一下......这有同样的问题:-)等一下,我会解决它......在我解决之前停止投票:-)
好吧,假设我是对的,问题是依赖于“就绪”处理程序的评估顺序(这本质上是一种“代码气味”猜测;可能还有其他一些问题),我所做的更改获胜真的很有帮助。如果第二个 block 先运行,则事件处理程序将尚未设置!
我认为强制排序的唯一真正方法是设置某种“ promise ”系统,或者简单地在元素上使用标记以及处理程序。这样,第一个 block 中的代码可以检查值分配是否已经发生。它有点笨拙,但至少它是明确的:
jQuery(function($) {
var input = $('#fields input[type="text"]');
if (input.data('value-ready'))
alert("value already set: " + input.val());
else
input.on('value-ready', function() {
alert("value is now set: " + input.val());
});
});
然后在第二个文件中:
jQuery(function($) {
$('#fields input[type="text"]').val("whatever")
.data("value-ready", true)
.trigger("value-ready");
});
关于javascript - jQuery 在 IE 上返回空输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915188/