【问题标题】:how to run preventDefault() when the condition is true - jQuery当条件为真时如何运行 preventDefault() - jQuery
【发布时间】:2021-04-29 04:23:56
【问题描述】:

我想问一些关于 jQuery 中的 preventDefault() 的问题:我的问题是当我在一个条件中使用 preventDefault() 时,该方法在检查我的条件是否为真之前正在运行,有人知道问题是什么吗?

我已经尽一切努力让我的preventDefault() 在我的条件为真时正常工作,但现实情况并非如此正确。

这是我的示例代码,让大家更详细地了解我的问题,希望大家能帮助我解决我的问题,谢谢。

$("input[name='test']").on({
  keydown: function(event) {
    const selector = event.which;

    if (selector == 69) {
      event.preventDefault();
    } else if (selector == 8) {
      const inputVal = $(this).val();
      const subsVal = inputVal.substr(0, (inputVal.length - 1));

      if (subsVal == '' || subsVal.length == 0) {
        console.log("stop it, it's already empty");
        event.preventDefault(); // => when I use this method is not working perfect, because when the input text length is not zero yet, the method is running then I can't delete it until the input value is empty or zero length
      }
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" name="test" value="1">

【问题讨论】:

  • 你可以将事件处理程序改为监听keyup而不是keydown,让用户先删除文本,然后触发错误
  • 感谢您的回答,但是当我使用keyup 时,preventDefault() 不起作用,所以为什么我选择keydown 而不是keyup
  • 您想阻止用户删除最后一个字符吗?然后它在 sn-p 中按我的预期工作。
  • 不,先生,我的意思是当我的输入值为空或我的输入中没有显示时,该方法将运行,例如当输入值具有最后一个字符时,可以再次删除该值,但是当我的值中没有任何字符时,我不能再使用退格了,先生
  • 您的代码清楚地表明:检查是否还有 one 字符,然后取消退格 - inputVal.substr(0, (inputVal.length - 1)) 只需删除 substr 部分。如果它不是你想要的,为什么会在那里?

标签: javascript jquery preventdefault


【解决方案1】:

主要问题是您检查字段长度的代码是错误的。你只需要使用$(this).val().length:

$("input[name='test']").on({
    keydown: function (event) {
    const selector = event.which;
    
    if (selector == 69) {
        event.preventDefault();
    } else if (selector == 8) {
        const inputVal = $(this).val();
      
        if (inputVal.length == 0) {
            console.log("stop it, it's already empty");
            event.preventDefault();
        }
    }
  }
})

但是,如果用户在字段中键入非数字的内容,即使这样也会失败,因为.val() 会将结果转换为数字,但不一定对应于实际值。

例如,键入“abc”,您将看到此代码失败。更多详情请见Get the value of a input number in jQuery

【讨论】:

  • 先谢谢先生。当我尝试使用您的解决方案时,我的输入值长度是返回 1 而不是 0,哦,当我尝试使用非数字时,它不会在我的控制台或任何东西中给我任何错误先生......结果仍然没有对
  • @LuckALip 您在寻找什么结果?请准确描述您希望它如何运作。
  • 仅供参考 .val()总是返回一个字符串 - 它不会“转换为数字” - .data() 这样做,而不是 .val()。这是您可以运行的测试 - 在输入中输入 1 并跳出:jsfiddle.net/xevhmuyo
  • @freedomn-m 我听到你在说什么,通常我会同意你的看法,但这里有一个细微的变化,输入字段是type="number"。当您输入一个字符串(例如“foo”)并退出时,.val() 返回一个空字符串:jsfiddle.net/62jrhtgw。你会如何解释这种行为?
  • @freedomn-m 同意,“转换为数字”对我来说是一个糟糕的选择。无论如何,我的 Fiddle 的全部意义在于表明,当您在 type="number" 输入字段中输入非数字时,浏览器会返回您输入的内容以外的内容。我用 Firefox 测试,而不是 Chrome。
猜你喜欢
  • 2011-08-14
  • 2019-06-18
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多