输入的数据未保存

时间:2018-02-11 17:17:53

标签: javascript

我正在尝试编写一个脚本,可以为this site的多个邮政编码生成保险报价。到目前为止,我已成功将数据输入对话框。手动输入包括:点击邮政编码字段,打开一个对话框,输入邮政编码,然后点击“继续”。

到目前为止,我的脚本看起来像这样:

document.querySelector('.btn.btn-default.postal-code').click();
window.setTimeout(function() {
  document.getElementById("PostalCode").value = "K0A1B0";
}, 2000);
window.setTimeout(function() {
  document.querySelector('.btn.btn-orange.validate-postal-code').click();
}, 2000);

如果我执行前两行,则会打开对话框并正确输入邮政编码。

如果我执行所有操作,邮政编码似乎没有改变,但对话框关闭了。但是,该值不会保存在主页面的字段中。我做错了什么?

我已经做了一些搜索并尝试在结束前提交表单,但我真的不知道我需要在这里做什么。这些都没有奏效:

document.forms[0].submit();
document.getElementById("PostalCode").submit();

2 个答案:

答案 0 :(得分:0)

当您使用setTimeout时,它会在您指定的时间安排执行,然后继续执行下一行。在您的情况下,两个setTimeout行中的代码将在2秒后几乎同时执行。您可以使用4秒作为第二个:

document.querySelector('.btn.btn-default.postal-code').click();
window.setTimeout(function() {
    document.getElementById("PostalCode").value = "K0A1B0";
}, 2000);
window.setTimeout(function(){
     document.querySelector('.btn.btn-orange.validate-postal-code').click();
}, 4000);

或者,您可以在第一个内部调用第二个,在这种情况下,第一个将在2秒后执行,并将安排第二个在2秒后执行:

document.querySelector('.btn.btn-default.postal-code').click();
window.setTimeout(function() {
    document.getElementById("PostalCode").value = "K0A1B0";
    window.setTimeout(function() {
        document.querySelector('.btn.btn-orange.validate-postal-code').click();
    }, 2000);
}, 2000);

编辑当触发键盘事件时,该值将被验证并复制到主页面。你可以在JavaScript中模拟它,但是因为网站使用它,所以在jQuery中更容易实现。更改值后添加trigger("change"),您将看到验证的邮政编码并将其复制到主页上的框中:

document.querySelector('.btn.btn-default.postal-code').click();
window.setTimeout(function() {
  $("#PostalCode").val("K1A1B0").trigger("change");
}, 2000);
window.setTimeout(function() {
  document.querySelector('.btn.btn-orange.validate-postal-code').click();
}, 4000);

注意:如果您在上面的代码中使用了无效的邮政编码,则该值将会更改并被复制,但您将看到验证消息,并且弹出窗口将保持打开状态。如果要手动验证邮政编码,请调用ValidatePostalCode()功能。它会返回truefalse,并根据您可以决定下一步该做什么。

答案 1 :(得分:0)

也许...

这可能是因为您正在设置值

  

window.setTimeout(function(){document.getElementById(“PostalCode”)。value =“K0A1B0”;},2000);

并在同一时刻提交......这就是问题所在。

  

window.setTimeout(function(){document.querySelector('。btn.btn-orange.validate-postal-code')。click();},2000);

试试这个......

var execute = function () {
  'use-strict';
   document.querySelector('.btn.btn-default.postal-code').click();
   window.setTimeout(function(){document.getElementById("PostalCode").value = "K0A1B0";}, 2000);
   window.setTimeout(function(){document.querySelector('.btn.btn-orange.validate-postal-code').click();}, 3000);
}();
相关问题