javascript - 基于正则表达式匹配启用 javascript/jquery 中的按钮

标签 javascript jquery html regex

我无法将 match 绑定(bind)到我的文本输入的 oninput 属性。基本上我希望仅当正则表达式匹配时才启用提交按钮。如果正则表达式不匹配,则当光标位于提交按钮上方时应显示一条消息。就目前情况而言,输入 abc 并不能像我希望的那样启用提交按钮。谁能告诉我我做错了什么?谢谢。

    <div id="message">
    </div>

<form method="POST">
  <input type="text" id="txt" oninput="match()" />
  <input type="submit" id="enter" value="enter" disabled />
</form>

  <script>

    var txt = $("#txt").value();

    var PATTERN = /abc/;
    var REQUIREMENTS = "valid entries must contain the string 'abc'";

    // disable buttons with custom jquery function

    jQuery.fn.extend({
    disable: function(state) {
        return this.each(function() {
            this.disabled = state;
        });
      }
    });

    $('input[type="submit"]).disable(true);

    var match = function(){

      if (txt.match(PATTERN)){
        $("#enter").disable(false)
      }

      else if ($("#enter").hover()){
        function(){
          $("#message").text(REQUIREMENTS);
        }
      }

  </script>  

最佳答案

您的代码将使用普通/普通 JavaScript 重写。

所以你的代码更干净,性能更好:

  <div id="message"></div>
  <form method="POST">
     <input type="text" id="txt" oninput="match()" />
     <input type="submit" id="enter" value="enter" disabled />
  </form>

         <script>
            var txt;
            var enter = document.getElementById('enter');
            var message = document.getElementById('message');
            var PATTERN = /abc/;
            var REQUIREMENTS = "valid entries must contain the string 'abc'";

            function match() {
                txt = document.getElementById('txt').value;
                if (PATTERN.test(txt)) {
                    enter.disabled = false;
                } else if (isHover(enter)) {
                    enter.disabled = true;
                    message.innerHTML = REQUIREMENTS;
                } else {
                    enter.disabled = true;
                }
            }
            function isHover(e) {
                return (e.parentElement.querySelector(':hover') === e);
            }
        </script>

如果你想说你想处理不同时刻的事件,你的代码应该如下。

注意:按钮被禁用时不会触发事件,因此解决方案是包装在触发事件的 div 元素中。尽管 HTML 代码有点脏,但 JavaScript 代码更简单。

<form method="POST">
   <input type="text" id="txt" oninput="match()" />
   <div style="display: inline-block; position: relative">
     <input type="submit" id="enter" value="enter" disabled  />
     <div id="buttonMouseCatcher" onmouseover="showText(true)" onmouseout="showText(false)" style="position:absolute; z-index: 1;
              top: 0px; bottom: 0px; left: 0px; right: 0px;">
     </div>
  </div>

        <script>
            var txt;
            var enter = document.getElementById('enter');
            var message = document.getElementById('message');
            var PATTERN = /abc/;
            var REQUIREMENTS = "valid entries must contain the string 'abc'";

            function match() {
                txt = document.getElementById('txt').value;
                if (PATTERN.test(txt)) {
                    enter.disabled = '';
                } else {
                    enter.disabled = true;
                }
            }
            function showText(option) {
                message.innerHTML = option ? REQUIREMENTS : "";
            }
        </script>

关于javascript - 基于正则表达式匹配启用 javascript/jquery 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34301238/

相关文章:

javascript - 平滑滚动不起作用,为什么?

javascript - 如何仅在外部 js.file 需要时加载 .js 文件

php - CakePHP w/jQuery (Javascript/Ajax) 简单链接和更新 - 我做错了什么?

javascript - 使用 FileReader 导入 javascript 文件时如何保留换行符?

PHP - 上传图片并显示在页面上

javascript - 如何使用 JQuery 将文本编码为 html

javascript - 将具有键的数组与对象 JavaScript 中的键进行比较

javascript - 将 HTML 中具有全名的类列表转换为 JSON

javascript - 无法读取 null 的属性 'value'

javascript - 页面准备好后将文本复制到剪贴板