在vanilla JavaScript中使用jQuery更改方法?

Sta*_*s_S 13 javascript jquery

我在下面写了一小段使用change方法的jQuery代码.我刚刚发现jQuery不再在项目中使用,所以我需要在Vanilla JS中重新编写change方法.只是寻求一些帮助我如何做到这一点.这是代码,它拉取一个输入的值并将其输入另一个输入.

(function(){

  $('#Email').change(function() {
    $('#UserName').val($(this).val());
  });

})();
Run Code Online (Sandbox Code Playgroud)

Rap*_*DDL 20

如果您不需要支持旧的IE,可以使用querySelector + addEventListener:

document.querySelector('#Email').addEventListener('change',function(){
    document.querySelector('#UserName').value = this.value;
});
Run Code Online (Sandbox Code Playgroud)

在视觉上它看起来就像jQuery一样.on('change', fn)(这就是.change()调用),只是更详细.

  • “老IE”现在已经很老了。事实上,现在任何 IE 都已经过时了,所以这是当今开发人员的最佳答案。 (3认同)
  • 这是一个很棒、优雅的解决方案,并且准确地说明了为什么包含 jQuery 库并不总是答案(我认为这可能是 OP 的意图)。完全同意@kasimir,即使在我工作的组织中,Windows 和软件环境受到严格管理,他们也都迁移到了 Edge。我认为我们可以安全地转向 querySelector。我确实非常有效地使用了这个解决方案来观察下拉状态的变化。感谢您出色而优雅的回复。 (2认同)

Cᴏʀ*_*ᴏʀʏ 11

浏览器因事件的附加方式而异.您可能想要从一个小帮助方法开始:

function addEventHandler(elem, eventType, handler) {
    if (elem.addEventListener)
        elem.addEventListener (eventType, handler, false);
    else if (elem.attachEvent)
        elem.attachEvent ('on' + eventType, handler); 
}
Run Code Online (Sandbox Code Playgroud)

对于以下示例,我将假设您的IIFE应该确实是一个DOM-ready事件.代码中的IIFE似乎没有任何用途.所以...

您的代码中有两个事件,即DOM-ready事件("DOMContentLoaded")和select元素的更改事件("onchange").利用上面的帮助程序,您的jQuery语法转换为:

addEventHandler(document, 'DOMContentLoaded', function() {
    addEventHandler(document.getElementById('Email'), 'change', function() {
        document.getElementById('UserName').value = this.value;
    });
});
Run Code Online (Sandbox Code Playgroud)

工作jsFiddle演示