【问题标题】:Exclude form button from 'onblur' event, JavaScript从“onblur”事件中排除表单按钮,JavaScript
【发布时间】:2015-01-09 07:20:39
【问题描述】:

我有一个表单,大部分输入字段都使用onblur,如下所示:

<form>
<input name="..." id="..." onblur="myFunction(name)" />
<button id="..." onclick="submit()">Submit</button>
</form>

表单通过onblur 事件实时验证某些字段(即用户名、电子邮件),但当用户单击提交按钮时会发生相同的检查。

目前,当用户单击提交按钮时,首先触发onblur 事件,然后触发来自按钮的onclick 事件 - 因此运行检查两次并浪费了几秒钟的额外时间。

有没有办法覆盖onblur 方法来排除用户按下提交按钮时发生的模糊?

我在想myFunction() 中的一个简单的if(/*button is clicked*/){},但我不知道如何检查按钮点击。而且,根据目前的表现,按钮点击似乎直到模糊之后才被注册。

提前致谢。

【问题讨论】:

  • “浪费了几秒钟” - 你在myFunction() 中做什么,以 为单位?
  • Ajax 调用做数据库检查用户名可用性。也许不是几秒钟,但足够的时间让我感到困扰。进行验证时,会出现一个风车。按下提交按钮时会出现相同的风车。所以用户看到:风车->输入确认(非常简短)->风车->重复输入确认。它只是看起来丑陋和故障。

标签: javascript jquery forms onclick onblur


【解决方案1】:

你可以这样做:

HTML

<form>
   <input type="text" name="name" id="id" />
   <input type="submit" />
</form>

jQuery

$(document).on('blur', 'input:not([type="submit"])', function(e) {
   var key = e.keyCode;  // the key pressed
   var elem = e.target;  // the element blurred 
   myFunction(name);
});

$(document).on('click', 'input[type="submit"]', function() {
   submit();
});

【讨论】:

  • 你误解了这个问题。原始代码在提交按钮上没有模糊处理程序。问题是如何防止 other 输入上的模糊处理程序在单击提交按钮之前获得焦点。
  • 这可能有效,但可能是一个愚蠢的问题:在第一种方法中,我如何获得 a) 导致模糊的事件(特别是键码),以及哪个模糊发生了?
  • 是的,就可以了!谢谢!您在 onclick 部分缺少方括号,否则很好。我特别需要e.target.id,否则就当场!
猜你喜欢
  • 2010-10-19
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2011-05-06
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多