使用JQuery显示警报后阻止焦点位于下一个表单元素

t30tvxxf  于 2022-12-22  发布在  jQuery
关注(0)|答案(2)|浏览(119)

我有一些文本输入,当用户跳到下一个输入时,我正在验证这些输入。我希望在显示警告后,焦点停留在有问题的输入上。我似乎无法确定正确的语法来让JQuery做到这一点。相反,下面的代码显示了警告,然后关注下一个文本输入。我如何防止在显示警告后跳到下一个元素?

$('input.IosOverrideTextBox').bind({
    blur: function(e) {
      var val = $(this).val();
      if (val.length == 0) return;
      var pval = parseTicks(val);
      if (isNaN(pval) || pval == 0.0) {            
        alert("Invalid override: " + val);
        return false;
      }
    },
    focus: function() {
      $(this).select();
    }
  });
jdzmm42g

jdzmm42g1#

我不喜欢强迫对焦,但你不能在模糊发生后再对焦吗?

element.focus();

如果在blur事件中这样做并不总是有效(我不确定它在什么时候触发,在实际的blur发生之前还是之后),那么一个冗余的超时也可以:setTimeout(function () { element.focus() }, 0).
但是请不要这样做。见鬼,你也不应该使用alert或任何一种模式对话框作为web界面。在表单字段中添加一个invalid类,在它旁边放一条消息,然后在所有字段都有效之前禁用提交,怎么样?这是一个侵入性小得多的解决方案,允许我以任何最适合我的方式填写表单。而不是任何对您来说最简单方法

gfttwv5a

gfttwv5a2#

默认情况下,您可以使用validation插件完成此操作。
焦点默认值无效:真
提交时通过validator聚焦最后一个活动元素或第一个无效元素。focusInvalid()。最后一个活动元素是表单提交时具有焦点的元素,以避免窃取焦点。如果没有元素获得焦点,则表单中的第一个元素获得焦点,除非关闭此选项。
然后,您只需要让focus事件处理程序执行您的选择,并让插件处理验证。

相关问题