4

我正在开发一个模拟器来模拟网页中的用户操作。在特殊情况下,页面中有几个按钮,单击每个按钮都会更改页面的内容。我以编程方式单击每个按钮,然后想要提取添加到页面的新内容。如果你看看:

http://www.elementbars.com/Build-a-Bar-Service.aspx#

你可以找到一个例子。

我的代码是这样的:


for (var int i=0; i< buttonArray.length; i++){ // buttonArray is the array of buttons
    triggerClickEvent(buttonArray[i]);
    extractNewContent();
}

function triggerClickEvent (clickableElement) {
   jQuery(clickableElement).trigger('click');
}

triggerClickEvent 和 extractNewContent 都可以正常工作,但问题是在触发 click 事件后,JavaScript 引擎应该等待一段时间以确保添加了新内容,但它的行为并不符合预期。例如,我注意到所有按钮都被点击了,但是 extractNewContent 为第一个按钮提取内容,这意味着这两个函数没有同步工作。我使用了 setTimeout 函数,但由于它不会阻塞执行,所以无法解决问题。我还使用了检查文档状态的函数,但效果不佳。

如果您能帮助我,我将不胜感激。

谢谢。

4

3 回答 3

0

您可以传递参数来触发函数,在我们的例子中,其中之一是回调函数 extractNewContent。并在点击事件处理程序中完成所有修改后调用此函数。所以处理程序将是

$(clickableElement).on('click', function(event, callback){
                       ...
                       all DOM modifications goes here
                       ...
                       if(typeof callback === "function")
                           callback();
                       }

然后用 extractNewContent 作为参数触发它

$(clickableElement).trigger('click',extractNewContent);
于 2013-07-25T14:25:32.880 回答
0

最简单的方法是使用 jQuery 之类的工具包。像这样的东西:

jQuery(document).ready(function() {
...
});

或者更简洁

jQuery(function() {

});

部分问题在于“准备就绪”在浏览器之间没有标准化。像 jQuery 这样的工具包弥补了这一点。

于 2013-07-25T13:50:28.530 回答
0

以下代码有效:

for (var int i=0; i< buttonArray.length; i++){ // buttonArray is the array of buttons
  triggerClickEvent(buttonArray[i]);
  alert('balalalala'); // if you remove this, it won't work.
  extractNewContent();
}

function triggerClickEvent (clickableElement) {
 jQuery(clickableElement).trigger('click');
}
于 2013-07-25T15:21:54.403 回答