【问题标题】:How can I catch a jQuery change event when I am manually changing the input value through another jQuery?当我通过另一个 jQuery 手动更改输入值时,如何捕获 jQuery 更改事件?
【发布时间】:2017-04-26 05:39:18
【问题描述】:

好吧,我在处理 input 字段的更改事件时遇到了问题。因为我正在通过另一个脚本更改输入字段的文本。因此,我无法赶上该事件。

看,我有 2 个按钮 -+,当我单击 -/+ 时,某个值将插入到文本框中。这是一个数值,我通过包含和减少 1 手动添加了增量和减量。无论如何,由于我在文本框中的文本正在更改,但是我无法在 jQuery 中捕获事件 我的代码如下

<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button>-</button><input type="text" id="abc" /><button>+</button>

我的 jQuery 函数都没有捕获事件。

$("#abc").change(function(){
    alert();
});
$("#abc").click(function(){
    alert();
});

因为我已经通过另一个 jQuery 助手添加了文本。那么我怎样才能捕捉到文本更改事件。我不想在增量和减量函数中写下代码。我想保持该代码完整。那么有什么办法可以轻松解决这个问题吗?提前致谢。

更新: 这是递增和递减的更新代码

var btn = $(this),
            oldValue = $('#abc').val().trim(),
            newVal = 0;

        if (btn.attr('data-dir') == 'up') {
            newVal = parseInt(oldValue) + 1;
        } else {
            newVal = parseInt(oldValue) - 1;
        }
$('#abc').val(newVal);

【问题讨论】:

  • 你可以租用其他脚本吗
  • 每日提示:如果您有需要在多个地方同步的数据,请开始使用 Vue.js。它可以与 jQuery 结合使用。此外,您正在使用用于选择的更改事件,而是使用输入。 $('#some_text_box').on('input', function() {})
  • 在很多情况下,添加框架(如 vue)的开销会太大。

标签: javascript jquery


【解决方案1】:

您需要.trigger(event)事件,当用户与元素交互时触发事件。

$("#abc").change(function() {
  console.log('changed', this.value);
});

$("button").click(function() {
  var btn = $(this),
    oldValue = $('#abc').val().trim(),
    newVal = 0;

  if (oldValue != '') {
    if (btn.attr('data-dir') == 'up') {
      newVal = parseInt(oldValue, 10) + 1;
    } else {
      newVal = parseInt(oldValue, 10) - 1;
    }
  }
  
  $('#abc').val(newVal).trigger('change');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button data-dir="down">-</button><input type="text" id="abc" /><button data-dir="up">+</button>

【讨论】:

  • 您的解决方案有效,但部分有效。因为当输入字段完全为空时,如果我尝试按下加号或减号按钮,则它不起作用。但是在加载时它带有一个值然后它工作正常。
  • @lazycoder,你能分享加号或减号按钮代码吗?最好看全图
  • 当然!!为什么不。让我提供一个快照。
  • var btn = $(this), oldValue = $('#abc').val().trim(), newVal = 0; if (btn.attr('data-dir') == 'up') { newVal = parseInt(oldValue) + 1; } else { newVal = parseInt(oldValue) - 1; } $('#abc').val(newVal);
  • @lazycoder,您需要在代码中处理该条件(空文本),我已经更新了 sn-p
【解决方案2】:

由于其他正在更改输入的脚本也使用 jquery,因此最可靠的方法可能是在输入值更新后手动触发更改事件。

$('.counter').val(oldValue + 1).trigger('change');

【讨论】:

  • 对不起!我想保持该功能完好无损。正如我在我的问题中提到的。因为这个功能在很多地方都用到了。但是这个功能只需要其中的 2 个。
  • 您写道,您不希望其他函数中的增量功能。这只是确保调用生命周期事件。它与您是否处理该事件无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2014-06-18
  • 2011-01-21
  • 1970-01-01
相关资源
最近更新 更多