jQuery / Javascript:自动填充动态填充元素

时间:2011-08-31 20:30:23

标签: javascript jquery html dom testing

问题


  

我正在尝试自动填充动态填充的元素(例如select输入)。问题是由于AJAX的异步性造成的,所以我需要某种“等到线程完成”。
  
  我尝试使用setTimeout(0)实现while循环,但是没有按预期进行。

演示


  

http://jsfiddle.net/vol7ron/wQZdM/

条件


  
      
  1. 无法 编辑源代码,因为这应该是自动填充表单以供测试的工具。
  2.   

3 个答案:

答案 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(){}

回调函数。但如果你真的无法编辑你的代码,你就无法修复它......