【问题标题】:addEventListener does not appear to work for change eventaddEventListener 似乎不适用于更改事件
【发布时间】:2017-04-07 15:46:35
【问题描述】:

只是一个简单的js sn-p:

HTML:

<input type="text" id="t1">
<input type="text" id="t2">

JAVASCRIPT:

var t1 = document.getElementById('t1');
var t2 = document.getElementById('t2');

t1.addEventListener('keyup', function () {
    t2.value = t1.value.toUpperCase();
});

t2.addEventListener('change propertychange input', function () {
    alert('dd');
});

如您所见,t2 的更改事件从未触发!这很简单,不需要更多的描述。在“Chrome 版本 56.0.2924.87(64 位)”和“Firefox 52.0(32 位)”中测试。有人知道吗?

更新:

关于t2.addEventListener应该是这样的:

t2.addEventListener('change', function () {
    alert('dd');
});

$("#t2").on('change propertychange input',function(){
    // do something here......
});

再次更新:

实际上,没有 t1 键入或更改事件。我只是将其用作示例。我唯一想要的是我需要知道 t2 的值何时被另一个函数改变。所以,我认为我们应该关注 t2,而不是 t1。

更新三:

我相信你们之前都使用过 Google 自动填充功能。有些 sn-p 喜欢这样:

autocomplete = new google.maps.places.Autocomplete(
    // .......
);
autocomplete.addListener('place_changed', fillInAddress);

function fillInAddress(){
    t2.val(......);
}

但是,问题是,我不想将触发器放在“fillInAddress”中,而是想在 t2 上的 addEventListener 或 on('change') 中捕获这个更改的事件,就像我之前写的那样...... .

最终更新:

仍然无法弄清楚为什么无法触发 t2 'change' 事件。但是,我在 t1 中放入了一些东西,就像@Kind 用户所做的那样,问题就解决了。如果有人有任何想法,我非常感谢您与我分享!

【问题讨论】:

标签: javascript addeventlistener


【解决方案1】:

老实说,我敢打赌,如果 t2 输入值的更改是由 t1 输入的更改引起的,那么 OP 实际上希望触发 alert

注意:目前,它是jQuery 解决方案。

$('#t1').on('keyup', function() {
  $('#t2').val($(this).val().toUpperCase()).change();
});

$('#t2').on('change', function() {
  alert('dd');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="t1">
<input type="text" id="t2">

【讨论】:

  • 谢谢,你快到了!唯一不同的是实际上没有我们可以使用的 t1 输入或更改事件。我只是将其用作示例。但是是的,就像你说的,我唯一想要的是我需要知道 t2 的值何时被其他函数改变。
  • 好吧,现在我希望它能让我撤消对另一个答案的支持。这是正确的答案。 @Jackzhao 只要使用.valyou manually trigger the event 更新值,它就应该按预期工作。
  • @Jackzhao:“就像你说的,我唯一想要的是我需要知道 t2 的值何时被其他函数改变” 这完全改变了你的问题。您的问题并没有说您想检测代码所做的更改。由其他代码一般更改,或者特别是当t1 的事件处理程序更改它时?以上将做后者(虽然我建议不要这样做,通过合成事件),但不是前者。
  • @T.J.Crowder TJ,如果您愿意为 OP 问题提供纯 js 解决方案,我愿意立即投票支持您的答案。
  • @T.J.Crowder 你说得对,没想那么多,我的错!但我还是被困在这里.....
猜你喜欢
  • 2022-12-03
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
相关资源
最近更新 更多