2017-10-18 70 views
-3

我有一个输入框,其中有一个事件侦听器在粘贴上触发。

$("#UserInput").on('paste', function(e){ 

}); 

我想阻止用户粘贴任何东西,但有效的号码,12或12.12将是有效的,但#12或12.12.12不会。所以我写了这个

var pasteData = ''; 
if(window.clipboardData && window.clipboardData.getData){ 
    pasteData = window.clipboardData.getData('Text'); 
    console.log('window.clipboardData'); 
} 
else{ 
    pasteData = e.originalEvent.clipboardData.getData('text'); 
    console.log('e.clipboardData'); 
} 

if(isNaN(pasteData)){ 
    e.preventDefault(); 
    console.log(pasteData + ' NOT allowed'); 
} 
else{ 
    console.log(pasteData + ' allowed'); 
} 

而且这个工程很好。但我也想让美元符号和逗号粘贴。所以12美元和12000美元应该可以工作,但是12.12美元不会。保留现有代码的最佳方式是什么,但允许在适当的情况下粘贴包含单个美元符号和逗号的值?

+0

类型=数字将处理满足你的需要。然后,只需在粘贴事件中删除货币符号和逗号即可。 –

+0

在这种情况下,这不是一个选项。 – onTheInternet

+0

可以向我解释倒票吗?我不确定这不符合规则。 – onTheInternet

回答

0

这是我如何解决这个

     $("#UserInput").on('paste', function(e){ 
          var pasteData = ''; 
          if(window.clipboardData && window.clipboardData.getData){ 
           pasteData = window.clipboardData.getData('Text'); 
          } 
          else{ 
           pasteData = e.originalEvent.clipboardData.getData('text'); 
          } 
          var valid = /^\$?\d{1,3}(,?\d{3})*(\.\d{1,2})?$/g.test(pasteData); 
          if(!valid){ 
           e.preventDefault(); 
          }         
         }); 
-2

检查pasteData要么不以$开头,要么其余的是NaN

在这里添加&& (!pasteData.startsWith('$') || isNaN(pasteData.slice(1)))

if (isNaN(pasteData) && (!pasteData.startsWith('$') || isNaN(pasteData.slice(1)))) { 
    // ... 
} 
+0

https://stackoverflow.com/help/privileges/vote-down –

+0

很多人也[持这种观点](https://meta.stackoverflow.com/questions/252506/question-quality-is-dropping-on -stack-overflow/252531#252531) –

+0

解释downvotes没有意义。如果我对可以改善它的答案进行批评,我会提供。 –