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');
});
等待一秒钟...这有相同的问题:-)坚持,我会修复它...并停止对我的投票直到我这样做:-)
好的,假设我是对的,那问题是依赖于“就绪”处理程序的评估顺序(这本质上是“代码味道”的猜测;可能还有其他问题),我所做的更改不会真正实现救命。如果第二个块先运行,则将未设置事件处理程序!
我认为,施加排序的唯一真正方法是建立某种“承诺”系统,或者仅在元素上使用标记以及处理程序。这样,第一个块中的代码可以检查以查看值分配是否已经发生。这有点笨拙,但至少是明确的:
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");
});