javascript - 焦点事件监听器未触发不可编辑的输入

标签 javascript html forms validation dom-events

我试图让焦点事件监听器在用户尝试输入采购订单时触发。框入地址字段。我无法为简单的按键解决方案编辑输入。我的代码中缺少什么导致我没有收到警报?

http://jsfiddle.net/ZQQS9/7/

<input type="text" size="25" maxlength="75" name="ShipAddress1" id="v65-onepage-shipaddr1" value="" style="" onkeydown="">

<script type="text/javascript">  
    document.addEventListener("focus", function killPObox(id) {
        var idValue = document.getElementById('v65-onepage-shipaddr1').value;   
        if (id == 'v65-onepage-shipaddr1') {
            function runVal() {
               if (idValue.substr(0,4).toUpperCase() === "PO B" || idValue.substr(0,5) === "P.O. ") {
                    alert("USA Light cannot ship to P.O. Boxes. Please enter a street address.");
                    }
                }
                    setInterval(runVal(),1);
            }
        }, true
    );
</script>

最佳答案

我列出了一些问题(除了底部的解决方案):

1) 正如 Halcyon 提到的,id你的论点 killPObox(id)函数被分配给事件,因此您可以通过首先获取 target 来获取所需的值这将是你的事件 <input> .

2) 正如 Barmar 提到的,事件监听器被添加到文档中,而不是输入元素本身。

3) 正如 Halcyon 提到的,setInterval()接收函数而不是函数的计算结果。

4) setInterval()这不是一个好的解决方案,因为这会运行您的检查次数过多。特别是当用户收到警报时,用户会不断收到警报。我们可以通过利用更合适的事件监听器来解决这个问题,比如 input .

5) focus事件不是一个好听的事件。我们可以使用 input 解决这个问题监听 <input> 值变化的事件.

以下代码段解决了上述问题。运行该代码段以查看它是否按照您希望的方式运行。

document.getElementById('v65-onepage-shipaddr1')
  .addEventListener('input', function killPObox(e) {
    var targetValue = e.target.value;
    if (targetValue.substr(0, 4).toUpperCase() === "PO B" || targetValue.substr(0, 5) === "P.O. ") {
      alert("USA Light cannot ship to P.O. Boxes. Please enter a street address.");
    }
  }, true);
<input type="text" size="25" maxlength="75" name="ShipAddress1" id="v65-onepage-shipaddr1">

关于javascript - 焦点事件监听器未触发不可编辑的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834326/

相关文章:

html - 使用 bootstrap 在图像和 div 之间添加一个空格

javascript - 如何在 Angular 中的 Quill Js 编辑器中预填充数据

java - 如何处理多个连续的表单和 Java 对象

javascript - 响应图像映射 - 不会比原始图像尺寸大

css - 使 CSS 在不同尺寸下更流畅

javascript - 我应该如何在http post请求的请求有效负载中传递json数据

javascript - 验证电子邮件或电话号码

jQuery 检测表单更改

javascript - pimcore后端白屏registerNS错误

javascript - stub 函数在被另一个函数调用时不会返回正确的值