【问题标题】:jQuery/Javascript: Autopopulate Dynamically Populated ElementsjQuery/Javascript:自动填充动态填充的元素
【发布时间】:2011-08-31 20:30:23
【问题描述】:

问题


我正在尝试自动填充动态填充的元素(例如select 输入)。问题是由于 AJAX 的异步性引起的,所以我需要某种“等到线程完成”。

我尝试使用 setTimeout(0) 实现 while 循环,但没有按预期进行。

演示


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

条件


  1. 不能编辑源代码,因为这应该是自动填充表单以进行测试的工具。

【问题讨论】:

  • 我不明白——如果你不能编辑源代码,你怎么能解决这个问题?
  • 我正在投票关闭我开始的other question,因为它可能让一些人感到困惑。
  • @vol7ron:这个更让我困惑。投票将其作为重复项关闭
  • 我猜他的意思是这是一个第三方工具,所以他无法访问其他正在运行的代码。
  • 顺便说一句,这不是重复的。

标签: javascript jquery html dom testing


【解决方案1】:

您应该使用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 仅在现代浏览器中可用。您可以使用以下任一 shims/pollyfills(它们都有不同的浏览器支持,因此请选择您需要的):

但这在测试工具中可能有点偷偷摸摸。一般来说,根据我在 selenium 或 casperjs 方面的经验,我只会等待新选项出现然后选择该选项。

【讨论】:

  • 我没有看到,我什至不记得问题的目的。我想我正在通过 Firebug 调试表单输入,并且想要某种方法来快速填充通用表单值。至少,我认为这就是为什么我提到无法触摸源代码的原因。无论如何,我没有看到你的 polyfill 链接,并且已经收回了我上面的 cmets。
【解决方案2】:

jQuery ajax 函数采用 success 回调函数。您可以在 ajax 调用成功完成后使用它来自动填充。你是说你不能修改ajax代码?

【讨论】:

    【解决方案3】:

    将其添加到您的

    success : function(){}
    

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

    【讨论】:

    • 该工具将用于页面测试表单。所以,源代码不应该被编辑,另一方面,测试代码可以,所以也许我可以覆盖一些函数。
    猜你喜欢
    • 2020-09-07
    • 2011-01-23
    • 2014-06-10
    • 1970-01-01
    • 2011-01-13
    • 2012-10-10
    • 1970-01-01
    • 2017-06-28
    • 2022-12-19
    相关资源
    最近更新 更多