【问题标题】:On input while maxlength is active trigger even if maxlength is reached在 maxlength 处于活动状态时输入时触发,即使达到 maxlength
【发布时间】:2015-04-02 10:49:49
【问题描述】:

“On input while maxlength is active trigger 即使达到 maxlength”,这是 on input 事件的经典用法。当达到 maxlength 时,我可以将事件设置为 false,但我觉得这不是很干净。

有没有其他方法可以在达到 maxlength 时不触发 onInput ?也许另一个事件,onChange 显然不起作用,因为它需要失去输入焦点。

一个简单的 jsfiddle 来显示我的“问题”: fiddlehttp://jsfiddle.net/ysC7L/195/ 在第三个文本框中,我希望我的 onInput(或其他)不触发。

【问题讨论】:

  • 无论内容长度如何,input 事件都会触发,因此您有两个选择: 删除您的事件处理程序(您不想要,这可能很糟糕,因为您需要听另一个事件以知道何时再次添加它),或者在达到最大长度时在您自己的处理程序函数中选择不处理
  • 您无法阻止事件触发,但您可以控制事件传播。按特定顺序将两个处理程序绑定到input 事件。第一个处理程序控制是否传播事件(基于最大长度),第二个处理程序可以在事件不是最大长度时处理。
  • 我想我明白你们俩所说的。事情是我需要在刚刚达到 maxlength 时触发事件(maxlength = 3 上的“ab”到“abc”,它需要触发,但“abc”=>“abc”不应该)。所以我不能检查事件本身的输入长度,因为它可能需要被触发。如果我必须根据先例值触发第二个,则如果我首先签入,则双重事件可能会起作用。已经谢谢了,我很快就会回来。

标签: javascript jquery html


【解决方案1】:

看来您可能需要存储对先前输入值的引用。如果您在较大函数范围内的输入上设置事件处理程序,则可以将输入的先前值存储在变量中并将其与当前值进行比较。

如果您在全局上下文中设置这些事件处理程序,您可能希望避免将以前的值存储为全局变量。相反,您可以在 HTML 输入元素本身上设置一个属性来跟踪先前的值。这是一个例子:

$('#input-5').on('input', function() {
    var self = $(this),
        prevValue = self.attr('data-prev-value') || '',
        currentValue = self.val(),
        maxLength = self.attr('maxlength');

    if (prevValue.length !== currentValue.length || prevValue.length !== maxLength) {
        // do processing
    }
    self.attr('data-prev-value', currentValue);
});

查看这个 jsfiddle:http://jsfiddle.net/ysC7L/203/

【讨论】:

  • 有趣,我昨天睡觉前刚做了这个,我来这里发布它。无论如何,非常感谢,这是我选择的解决方案。我在输入时遇到了一些关于 cordova 和 maxlength 的问题,但这是另一个问题。
  • 只要您保持旧值 - 您实际上并不需要比较所有内容的长度。检查 self.val() != prevValue 就足够了
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多