javascript - 为什么在更改文本字段时未立即启用提交按钮?

标签 javascript jquery

使用此代码,按钮将仅在以下时间后启用:

  1. 我在文本字段中输入内容

  2. 我将焦点从文本字段中移出。

如何让按钮在输入内容后立即启用?

  function validateAmount(){
    if ($('#parlay-amount-textfield').val().length > 0) {
        $("#parlay-submit-button").prop("disabled", false);
    }
    else {
        $("#parlay-submit-button").prop("disabled", true);
    }
  }

  $(document).ready(function(){
    validateAmount();
    $('#parlay-amount-textfield').change(validateAmount);
  });

最佳答案

在焦点离开input 字段之前,change 事件不会触发。

您可以在现代浏览器上使用 input 事件,该事件会立即触发。或者支持稍旧的浏览器的事件组合:输入更改粘贴单击,您可以立即响应,然后keydown,您需要在非常短暂的延迟后响应。但我认为现在 input 的支持非常好,但 IE8 不支持它是一个明显的异常(exception)。

输入的示例:

function validateAmount() {
  if ($('#parlay-amount-textfield').val().length > 0) {
    $("#parlay-submit-button").prop("disabled", false);
  } else {
    $("#parlay-submit-button").prop("disabled", true);
  }
}

$(document).ready(function() {
  validateAmount();
  $('#parlay-amount-textfield').on("input", validateAmount);
});
<input type="text" id="parlay-amount-textfield">
<input type="button" id="parlay-submit-button" value="Send">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

立即处理输入更改粘贴点击并在非常短暂的延迟后处理keydown的示例:

function validateAmount() {
  if ($('#parlay-amount-textfield').val().length > 0) {
    $("#parlay-submit-button").prop("disabled", false);
  } else {
    $("#parlay-submit-button").prop("disabled", true);
  }
}

$(document).ready(function() {
  validateAmount();
  $('#parlay-amount-textfield')
    .on("input change paste click", validateAmount)
    .on("keydown", function() {
      setTimeout(validateAmount, 0);
    });
});
<input type="text" id="parlay-amount-textfield">
<input type="button" id="parlay-submit-button" value="Send">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

旁注:FWIW,validateAmount 可以短一点:

function validateAmount() {
  $("#parlay-submit-button").prop("disabled", $('#parlay-amount-textfield').val().length == 0);
}

如果空格不是有效值,您可以考虑在 $('#parlay-amount-textfield').val() 周围抛出 $.trim() (或在现代浏览器上,使用 $('#parlay-amount-textfield').val().trim())。

关于javascript - 为什么在更改文本字段时未立即启用提交按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828049/

相关文章:

javascript - 如何根据选择值显示表单输入字段?

javascript - AngularJS - 类型错误 : fn is not a function

javascript - 使用 Sharer.php 自定义 Facebook 共享

jquery - 使用 Ajax 调用填充数据表

javascript - 通过 jQuery 获取没有文本的 HTML 片段

javascript - 让 jQuery 在 Jetpack 中工作

javascript - 在网站内容的屏幕中间制作可点击的图像

javascript - 我需要在 DOM 上插入像素跟踪吗?

javascript - Firefox 插件 - 我可以监听 nsIPromptService 处理的提示吗?

jquery - 如何在加载页面时制作图像 'pop out'(使用 jQuery 或可能的 CSS 转换)