这似乎是一个非常基本的问题,但我可以弄清楚如何在检查HTML元素之前确保jquery被执行。 我有一个循环进入搜索栏并读取结果并检查搜索条件是否返回任何事物。
除了点击搜索按钮之前,if结构检查元素,这就是我想要的。我运行扩展程序的网站是https://www.avnet.com/wps/portal/us
var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];
var i;
for (i = 2; i < searchTerms.length; i++) {
var curTerm = searchTerms[i];
$('#searchInput').val(curTerm);
$('.input-group-addon').click();
if($(".avn-noresultspage-main-section")[0]){
$(".avn-noresultspage-main-section").css( "border", "10px solid red" );
alert('This is a Null!');
}else{
alert('Not a Null!');
}
}
所以通过一些谷歌搜索我发现链接/回叫功能是要走的路。 Callback function example 所以我在点击jquery之后调用check元素函数。但现在没有任何反应。我只是通过for循环,最后一次点击甚至没有被执行?
我应该如何正确地将我的行为联系起来?
var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];
var i;
for (i = 2; i < searchTerms.length; i++) {
var curTerm = searchTerms[i];
$('#searchInput').val(curTerm);
$('.input-group-addon').click(function() {
if($(".avn-noresultspage-main-section")[0]){
$(".avn-noresultspage-main-section").css( "border", "10px solid red" );
alert('This is a Null!');
}else{
alert('Not a Null!');
}
} );
}
更新:我确实尝试使用超时功能,但我似乎也冻结了点击的执行。
var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];
var i;
for (i = 2; i < searchTerms.length; i++) {
var curTerm = searchTerms[i];
setTimeout(function() {
$('#searchInput').val(curTerm);
$('.input-group-addon').click();
}, (3 * 1000));
if($(".avn-noresultspage-main-section")[0]){
$(".avn-noresultspage-main-section").css( "border", "10px solid red" );
alert('This is a Null!');
}else{
alert('Not a Null!');
}
}
点击后有延迟的方法吗?
答案 0 :(得分:1)
您修改的代码在代码逻辑中肯定是不同的。语法.click(function)
用于向“click”事件添加/修改事件处理程序。要使其像第一个版本一样工作,您需要在其后添加链触发器,例如click(function(){...}).click();
在单击事件触发器之前检查代码执行的原因是,搜索事件可能是一个AJAX事件,当您触发单击时,Javascript只会“单击”并执行检查代码而无需等待搜索事件返回结果。你应该使用:
$(document).ajaxSuccess(function(){
//checking code here
});
但它适用于此站点上的所有ajax事件,因此最好的解决方案是你应该添加等待检查代码的超时,以确保我们返回了搜索结果。