【问题标题】:Javascript onchange, onmouseup, onkeypress etc on IE. Help plsIE 上的 Javascript onchange、onmouseup、onkeypress 等。请帮助
【发布时间】:2015-02-18 10:00:54
【问题描述】:

我希望有人可以帮助我创建一个带有 10 个数字输入字段的 HTML 表单,其中包含 class="takings"。我想将一个 JS 函数理想地附加到每个事件的 onchange 事件中,但如果必须,我会选择 onmouseup 或类似的。 以下是从外部 js 文件中调用的:

  function init(){
   var input = document.getElementsByClassName("takings"); 
    for (var i = 0; i < input.length; i++) { 
   input[i].onchange = function()
   {
    alert('testing');
   }
   input[i].value = 0.00; 

}
}
window.onload=init;

我已经在 Firefox 和 chrome 上测试了这段代码,它运行良好。但是它在 IE 上不起作用(到目前为止我已经测试过 IE8 和 IE11)。我需要让这个应用程序在 IE 中运行,因为它是我们在公司网络上使用的唯一浏览器。由于其他依赖项发生变化,它甚至不是一个选项。 我确实短暂地想到,我们可能有一些组策略阻止了某些浏览器功能,但同样的行为发生在我们的域之外。 谁能告诉我哪里出了问题或在 IE 上实现等效功能的方法?

非常感谢

*****更新**********

function init(){
   var input = document.querySelectorAll(".takings"); 
    for (var i = 0; i < input.length; i++) { 
   input[i].attachEvent("onchange", function () {alert('testing');}); 
   input[i].value = 0.00;
} 

}

此代码仅适用于 ie8,不适用于 ff 或 ie11

【问题讨论】:

  • IE8(作为黑暗时代的浏览器,应该从宇宙中淘汰)不支持getElementsByClassName。不过它应该可以在 IE11 上运行。
  • 假设这是一个文本字段:尝试 onkeyup() w3schools.com/jsref/event_onkeyup.asp
  • 尝试使用 document.querySelectorAll(".takings");
  • 我认为从 ie9 开始,querySelectorAll 会起作用,如果您还有任何问题,请告诉我

标签: javascript internet-explorer


【解决方案1】:

对于ie,你必须使用attachEvent。当元素失去焦点时会触发 onchange。您可以尝试 onkeypress 来解决它。

【讨论】:

    【解决方案2】:

    试试

     document.querySelectorAll(".takings"); 
    

    而不是

    document.getElementsByClassName("takings"); 
    

    querySelectorAll() 方法支持IE9上的文字

    更多参考thisthis

    更新

    我们可以在 IE6、7、8 中使用 getElementsByClassName() 已经在 stackoverflow 中讨论过这个话题,所以如果你想做类似的事情,请参考this

    【讨论】:

    • 您好 Arunprasanth,感谢您修改它以使用 querySelectorAll 这现在适用于 ff 和 ie8,但不适用于 ie11。它让我更接近了,但我不想放置一个生产应用程序来阻止我们使用 ie8。非常感谢您的帮助
    • @danparker 检查我答案中的链接,有人解释了适用于大多数浏览器的方法,如果我的答案解决了您的问题,那么您可以将其作为正确答案,然后有人可以参考它在未来
    • 也试过这个:'function init(){ var input = document.querySelectorAll(".takings"); for (var i = 0; i
    • @danparker 如果您没有用于其他目的的文本框,那么您可以使用 document.getElementsByTagName()
    【解决方案3】:
        function getsum(){
        var total = 0;
        var fields = $('.takings');
    
        for (i = 0; i < fields.length; i++) {
        total += parseFloat(fields[i].value);
        }
    
        var label = document.getElementById("TotalLabel");
        label.innerHTML = total;
     }
    
    
    function init(){
    
     $('.takings').change(function(){getsum()});
    
    }
    
    window.onload=init;
    

    在所有浏览器上工作,感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2010-12-15
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多