【问题标题】:Trying to resolve a script that allows only numbers is not working in internet explorer 11尝试解析仅允许数字的脚本在 Internet Explorer 11 中不起作用
【发布时间】:2018-06-22 04:53:28
【问题描述】:

我有这个脚本,它只允许目标输入中的数字,并防止在该输入中插入其他字符,这适用于除

之外的所有浏览器

Internet explorer 11。该错误作为语法错误出现在第 14 行。我怎样才能让它在 Internet Explorer 11 上运行?

控制台中的错误没有给我太多信息,它只是用红色字母说语法错误,它给了我这个链接https://docs.microsoft.com/en-us/scripting/javascript/misc/syntax-error-javascript 所以换句话说,它没有给我关于错误的真正有用的信息,所以我被卡住了在那里。

  document.querySelector('#numbers-only').addEventListener('keypress',preventNonNumbersInInput);
	  function preventNonNumbersInInput(event){
		var characters = String.fromCharCode(event.which);
		if(!(/[0-9]/.test(characters))){
			event.preventDefault();
		}
	  }
	  
	  document.querySelector('#numbers-only').addEventListener('paste',pasteTest);
	  function pasteTest(event){
	   window.setTimeout(() => { //<-line 14
		 var characters =event.target.value;
		 window.setTimeout(() => {
			if(!(/^\d+$/.test(characters))){
				event.target.value = event.target.value.replace(/\D/g, '');
			 }
		 });
	   });
	  }
&lt;input type="text" id="numbers-only"&gt;

【问题讨论】:

  • 错误声明说什么?你能发布错误信息吗?
  • 感谢您的回复,它只是用红色字母表示语法错误,它给了我这个链接docs.microsoft.com/en-us/scripting/javascript/misc/…
  • 好吧,我不完全知道这个问题,但它可能是浏览器兼容性问题。我不认为 IE 支持箭头功能。试着写老派
  • 感谢您的提要 Krishna Prashatt,当您的意思是老派时,您指的是什么?
  • 与 inus saha 在回答中提到的相同。用 javascript 编写函数的旧方法。

标签: javascript


【解决方案1】:

您的以下功能需要更正。 IE11 不支持匿名函数的箭头符号。

function pasteTest(event){
    window.setTimeout(() => { //<-line 14
     var characters =event.target.value;
     window.setTimeout(() => {
        if(!(/^\d+$/.test(characters))){
            event.target.value = event.target.value.replace(/\D/g, '');
         }
     });
    });
}

以下是正确的版本。

function pasteTest(event){
    window.setTimeout(function(){
     var characters =event.target.value;
     window.setTimeout(function(){
        if(!(/^\d+$/.test(characters))){
            event.target.value = event.target.value.replace(/\D/g, '');
         }
     });
    });
}

【讨论】:

  • 感谢您的回复 inus saha,它给了我同样的未知错误,也就是语法错误,这次又是一个链接,它位于第 16 行,它首先引用了 window.setTimeout(() => {它没有显示,所以我不得不刷新页面才能看到错误。
  • 我更新了我的答案,现在应该可以了。我错过了一个箭头功能有两个箭头功能:)
  • 它只出现在 ie??
【解决方案2】:

IE 11 不支持 ES6 功能,因此不支持箭头功能。 将代码 sn -p 改为

document.querySelector('#numbers-only').addEventListener('keypress',preventNonNumbersInInput);
    function preventNonNumbersInInput(event){
      var characters = String.fromCharCode(event.which);
      if(!(/[0-9]/.test(characters))){
          event.preventDefault();
      }
    }

    document.querySelector('#numbers-only').addEventListener('paste',pasteTest);
    function pasteTest(event){
     window.setTimeout(function() { // change the declaration
       var characters =event.target.value;
       window.setTimeout(function() {
          if(!(/^\d+$/.test(characters))){
              event.target.value = event.target.value.replace(/\D/g, '');
           }
       });
     });
    }

【讨论】:

    【解决方案3】:

    你应该试试下面的代码。我做了一些改变。当我在文本字段中过去 char 时,它在 ie 11 中对我有用。如果您有任何疑问,请告诉我。

    document.querySelector('#numbers-only').addEventListener('keypress',preventNonNumbersInInput);
        function preventNonNumbersInInput(event){
        var key = event.which || event.keyCode || 0;
          var characters = String.fromCharCode(key);
          if(!(/[0-9]/.test(characters))){
              event.preventDefault();
          }
        }
    
        document.querySelector('#numbers-only').addEventListener('paste',pasteTest);
        function pasteTest(event){
        
         window.setTimeout(function() { // change the declaration
           var characters =event.target.value;
                                                 //remove inner settimeout()
              if(!(/^\d+$/.test(characters))){
                  event.target.value = event.target.value.replace(/\D/g, '');
               }
           
         });
        }
    &lt;input type="text" id="numbers-only"&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 2019-08-12
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      相关资源
      最近更新 更多