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');
});
备注:
任何帮助表示赞赏!谢谢!
答案 0 :(得分:6)
不要假设该值已在您的第一个“就绪”处理程序中设置,而是让它处理自定义事件,然后从第二个文件中触发该事件。
第一档:
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");
});