Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-表单验证延迟了一个事件_Javascript_Jquery_Html_Forms - Fatal编程技术网

Javascript jQuery-表单验证延迟了一个事件

Javascript jQuery-表单验证延迟了一个事件,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我正在使用谷歌地图帮助用户更快地填写我的表格 表单是可选的,因此默认情况下,“提交”按钮处于启用状态。每当用户使用API autocomplete选择任何地址时,我想检查是否填写了邮政编码和地区输入,如果不是,则应禁用该按钮 问题是jQuery代码延迟了一个事件,它在邮政编码和位置更新之前被调用 当用户选择了一个选项并且两个字段都已填充时,应启用该按钮 请参阅上的演示 HTML: 如何解决此问题?找到了一种方法,我使用google maps eventListener调用了我的函数 Javasc

我正在使用谷歌地图帮助用户更快地填写我的表格

表单是可选的,因此默认情况下,“提交”按钮处于启用状态。每当用户使用API autocomplete选择任何地址时,我想检查是否填写了邮政编码和地区输入,如果不是,则应禁用该按钮

问题是jQuery代码延迟了一个事件,它在邮政编码和位置更新之前被调用

当用户选择了一个选项并且两个字段都已填充时,应启用该按钮

请参阅上的演示

HTML:


如何解决此问题?

找到了一种方法,我使用google maps eventListener调用了我的函数

Javascript:


updateForm将在fillInAddress之后调用,如注释中所述,您应该使用回调。place_changed事件始终是最后一个触发的事件,因此您应该在其中执行任何需要的验证。我在回答中没有执行任何验证,您可以自己编写验证代码并使用该代码启用按钮。当用户开始键入新地址时,您只需要使用keyup键来确保按钮被禁用。如果您添加onclick和blur,当用户单击输入而不更改它时,您将遇到问题

$(document).on('keyup', '#autocomplete', function() {
   $('button').prop('disabled', false);
});

function formIsValid(){
    // you write this code
    return true;
}

function initialize() {
  autocomplete = new google.maps.places.Autocomplete(document.getElementById("autocomplete"), {
    types: ["geocode"]
  }), google.maps.event.addListener(autocomplete, "place_changed", function() {
    fillInAddress()
    if(formIsValid()) $('button').prop('disabled', false);
  })
}

使用来自自动完成的回调。这是异步的,请不要要求我们调试缩小的代码。JSFIDLE上有一个整洁的按钮,您可以使用它使其可读。
$(document).on('click keyup change input blur', '#autocomplete', function() {
    if ($(this).val().length > 0){
      $('button').prop('disabled', true);
      if ($('#postal_code').val().length > 1 && $('#locality').val().length > 1) {
          $('button').prop('disabled', false);
      }
  } else {
      $('button').prop('disabled', false);
  }
});

// See fiddle for Google Maps API.
function updateForm() {
    if ($('#postal_code').val().length > 1 && $('#locality').val().length > 1) {
        $('#submit-form').prop('disabled', false);
    } else {
        $('#submit-form').prop('disabled', true);
    }
}

google.maps.event.addListener(autocomplete, 'place_changed', function() {
    fillInAddress();
    updateForm();
});
$(document).on('keyup', '#autocomplete', function() {
   $('button').prop('disabled', false);
});

function formIsValid(){
    // you write this code
    return true;
}

function initialize() {
  autocomplete = new google.maps.places.Autocomplete(document.getElementById("autocomplete"), {
    types: ["geocode"]
  }), google.maps.event.addListener(autocomplete, "place_changed", function() {
    fillInAddress()
    if(formIsValid()) $('button').prop('disabled', false);
  })
}