【问题标题】:How to Check for a missing variable In JS? [duplicate]如何在 JS 中检查缺失的变量? [复制]
【发布时间】:2019-04-09 10:11:03
【问题描述】:

我试图在允许表单提交之前检查变量是否存在。

目前,用户在表单中输入地址,自动完成功能会在表单中添加 lat 和 long。我写了以下js

function check() {
    let latitude = document.getElementById("latitude").value;
    if (latitude == null) {
        window.prompt("ned a correct address", "");
        return false;
    } else {
        alert('It worked');
        return true;
    }
}

当我提交的地址没有自动完成 lat 和 long 时,我仍然得到“它有效”

这是我的表格

<form method="GET" action="/search" onsubmit="check()">
    <input class="form-control" id="getaddy" type="text" placeholder="Search..." name="term" onFocus="geo()">
    <input id="latitude" type="hidden" name="latitude">
    <input id="longitude" type="hidden" name="longitude">
</form>

【问题讨论】:

  • 调试这段代码的时候,你描述的场景中的条件latitude的值是多少?
  • @csmckelvey 更正了以下答案中的错误 :-)

标签: javascript forms onsubmit


【解决方案1】:

如果你真的想检查变量是否存在,有一个安全的方法可以做到这一点,使用:

if(variable) {
  // Truthy
} else {
  // Falsy
}

这样,您将获得所有可能的 Falsy 场景,包括:nullundefinedNaN""0,最后是 false 本身...无需检查每个其中之一!

这是编辑后的sn-p:

function check() {
  let latitude = document.getElementById("latitude").value;
  if (latitude) {
    alert('It worked');
    return true;
  } else {
    window.prompt("ned a correct address", "");
    return false;
  }
}
<form method="GET" action="/search" onsubmit="check()">
  <input class="form-control" id="getaddy" type="text" placeholder="Search..." name="term" onFocus="geo()">
  <input id="latitude" type="hidden" name="latitude">
  <input id="longitude" type="hidden" name="longitude">
</form>

*此代码将只执行一次!

【讨论】:

  • 如果您对简洁感兴趣,您可以简单地使用return !!latitude 而不是整个if 部分:) 但是您会失去警报。
  • 太棒了!这做到了。非常感谢
  • OP 并不是真正测试变量是否存在,而是测试是否已将某些内容输入到表单控件中。在这种情况下,该值应该根据合适的标准进行测试,所以if (latitude == '') 是首选,因为在执行测试时,它的值必须是一个字符串。虽然测试-90 &lt;= latitude &lt;= +90 也会更好。
【解决方案2】:

为了更可靠的表单验证,这里需要考虑一些事项;

  1. 如果验证失败,建议使用事件对象取消提交操作
  2. 通过测试“空字符串”而不是 null 来验证输入字段值
  3. 确保您的脚本中没有抛出任何错误(即确保已定义 geo() 等),以便实际调用 check() 而不是由于另一个脚本错误而静默调用失败

以下更改可能会有所帮助:

// Pass event object
function check(event) {
  
  let address = document.getElementById("getaddy").value;
  
  // Check for empty string, rather than null
  if (address === '') { 
    window.prompt("ned a correct address", "");
      
    // Use Event#preventDefault() to prevent submit
    // as a more reliable alternative to returning 
    // false
    event.preventDefault();
  } else {
  
    alert('It worked');
  }
}


// Ensure geo() is defined, seeing your form is relying on this
function geo() { }
<!-- update check call to pass event object -->
<form method="GET" action="/search" onsubmit="check(event)">

  <input class="form-control" id="getaddy" type="text" placeholder="Search..." name="term" onFocus="geo()">
  <input id="latitude" type="hidden" name="latitude">
  <input id="longitude" type="hidden" name="longitude">
  
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多