使用click()方法是在创建一个无休止的循环

Using a click() method is creating an endless loop

本文关键字:一个 无休止 循环 click 方法 使用 创建      更新时间:2023-09-26

我想做的是让我在整个网站上的搜索输入在我已经构建的结果页面上显示搜索结果。这段代码是有效的,但它通过不断点击搜索来创建一个无休止的循环。有什么办法可以让它只点击一次吗?或者单击一下就结束功能?

提前谢谢。

function getParameter(paramName) {
    var searchString = window.location.search.substring(1),
        i, val, params = searchString.split("&");
    for (i = 0; i < params.length; i++) {
        val = params[i].split("=");
        if (val[0] == paramName) {
            return val[1];
        }
    }
    return null;
}
var firstRun = true;
var search = getParameter("TextBox1");
if (search != "") {
    var clickSubmit = setTimeout(function() {
        if (firstRun) {
            document.getElementsByName("TextBox1")[1].value=search;
            document.getElementsByName("btnSearch")[1].click();
            clearTimeout("firstRun");
        }
    }, 500); 
};
document.writeln('<table style="background-color: #002e58; float: right; margin-right: 140px;"><tr><td><form name="Form1" method="get" action="../zsearch.aspx" id="Form1"><tr><td style="width: 12%; font-size: small;"></td><td><input name="TextBox1" type="text" id="TextBox1" style="width: 233px; padding=" /><input type="submit" name="btnSearch" value="Search" id="btnSearch" style="font-family: Arial; font-size: 12;"/></td><td>&nbsp;</td></tr><tr></tr></form></table>');

我相信您希望firstRun是您的超时ID,但在您上面发布的示例中,它实际上是clickSubmit

试试这个?

var timeoutId = setTimeout(function() {
  if (timeoutId) {
    document.getElementsByName("TextBox1")[1].value=search;
    document.getElementsByName("btnSearch")[1].click();
  }
},500); 

由于输入数据是永久性的,所以会出现无休止的循环。每个加载firstRun的html页面设置为true,然后通过触发点击事件编写提交表单的脚本,然后使用相同的查询参数再次加载html页面,以此类推

如果出现以下情况,您可能会打破此循环:

  1. 加载页面后,您设置了一个特殊的字段,意思是"不首先运行",然后检查该字段的存在
  2. 在提交之前,您将搜索字段保存在cookie上,并在重新加载页面上比较cookie值和字段值(如果相等,则"不首先运行")