【问题标题】:Detect changes on input[type="text"] immediately立即检测 input[type="text"] 的变化
【发布时间】:2013-07-06 20:17:47
【问题描述】:

input 中的inpt 类的值发生变化时,我必须检测到变化。我的解决方案:

我有这个输入:

<input type="text" class="inpt" />

我有这张支票:

$('input.inpt').on("input change", function() {
    doStuff();
})

当我在输入中输入内容时,doStuff() 会立即执行。当我需要在 javascript 中更改输入值时,我会这样做:

    $('input.inpt').val(value);
    $('input.inpt').change();

这是一个好方法吗(因为使用这样的更改功能似乎有点脏)?它适用于所有浏览器吗?谢谢。

【问题讨论】:

  • on("input" 肯定不会做太多...
  • 你可以使用keypress 不能吗?
  • @hungerpain 我不认为,因为输入的值可以通过javascript中的某些函数进行更改。
  • onkeydown (当用户按下按键时触发), onkeypress (当用户按下按键时触发) onkeyup (当用户释放按键时触发), onchange (当用户按下按键时触发),元素的值被改变)
  • @Brett: change 触发 text-input(和 textarea)元素,一旦该元素失去焦点/被模糊。不是马上。

标签: javascript jquery onchange


【解决方案1】:

调用.change() 只是.trigger('change') 的快捷方式,即您正在触发更改事件。这似乎是一件完全可以接受的事情。

【讨论】:

  • 其实,This method is a shortcut for .on('change', handler) in the first two variations, and .trigger('change') in the third. 但我完全同意:-D
【解决方案2】:

正如另一个答案所述,为程序性更改调用更改不应看起来像是任何形式的黑客攻击,实际上可能是最好也是唯一的方法。

var oInpt = $('input.inpt')
oInpt.on("change", function(oEvent) { }); 

function changeValue(sStr)
{
    oInpt.val(sStr);
    oInpt.trigger("change"); 
}

【讨论】:

    【解决方案3】:

    我认为这样做并没有错,但我更喜欢编写一个函数来处理这两个依赖任务,例如:

    function setInputValue(inputElement, value)
    {
        $(inputElement).val(value);
        doStuff();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 2013-09-02
      • 1970-01-01
      • 2017-06-03
      • 2013-06-28
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多