我正在尝试自动填充动态填充的元素(例如
select
输入)。问题是由于AJAX的异步性造成的,所以我需要某种“等到线程完成”。
我尝试使用setTimeout(0)实现while
循环,但是没有按预期进行。
http://jsfiddle.net/vol7ron/wQZdM/
- 我 无法 编辑源代码,因为这应该是自动填充表单以供测试的工具。
醇>
答案 0 :(得分:2)
您应该使用MutationObserver
来处理此问题。观察所有选择元素以供将来更改。
这是更新后的fiddle。
基本上这是我改变它的方式:
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
handleSelect(mutation.target);
});
});
$('select').each(function () {
observer.observe(this, { childList : true }); // We observe the elementw
handleSelect(this);
});
function handleSelect(el) {
var t = $(el);
var c = t.children('option');
t.val(c.eq(1).val()); // set value to second option value
t.trigger('change'); // calls the onChange even if it doesnt exist
}
请注意,MutationObserver
仅适用于现代浏览器。您可以使用以下任何一个垫片/ pollyfills(它们各自具有不同的浏览器支持,因此请选择您需要的那个):
但这可能是测试工具的一种偷偷摸摸的问题。通常根据我从selenium或casperjs的经验,我只是等待新选项到达然后选择该选项。
答案 1 :(得分:-1)
jQuery ajax
函数采用success
回调函数。在ajax调用成功完成后,您可以使用它自动填充。你是说你不能修改ajax代码吗?
答案 2 :(得分:-1)
将其添加到您的
success : function(){}
回调函数。但如果你真的无法编辑你的代码,你就无法修复它......