Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将更改应用于粘贴到输入而不是向下键输入时的文本_Javascript - Fatal编程技术网

Javascript 将更改应用于粘贴到输入而不是向下键输入时的文本

Javascript 将更改应用于粘贴到输入而不是向下键输入时的文本,javascript,Javascript,我试图在用户输入中的电话号码之间添加-,使其类似于xxx xxx xxxx,而不是xxxxx xxxxx 当使用按键输入值时,这可以正常工作,但是粘贴数字或Chrome自动填充功能如何?例如,如果将2222复制并粘贴到输入中,则不会在输入之间添加- 我怎样才能解决这个问题 $(函数(){ $('#txtnumber').keydown(函数(e){ var key=e.charCode | | e.keyCode | | 0; $text=$(此项); 如果(键!==8和键!==9){ 如果(

我试图在用户输入中的电话号码之间添加
-
,使其类似于
xxx xxx xxxx
,而不是
xxxxx xxxxx

当使用按键输入值时,这可以正常工作,但是粘贴数字或Chrome自动填充功能如何?例如,如果将
2222
复制并粘贴到输入中,则不会在输入之间添加
-

我怎样才能解决这个问题

$(函数(){
$('#txtnumber').keydown(函数(e){
var key=e.charCode | | e.keyCode | | 0;
$text=$(此项);
如果(键!==8和键!==9){
如果($text.val().length==3){
$text.val($text.val()+'-');
}
如果($text.val().length==7){
$text.val($text.val()+'-');
}
}
返回(key==8 | | key==9 | | key==46 | | |(key>=48&&key=96&&key原始答案(查看更新)[有趣]
将
change
事件侦听器添加到输入中,因为粘贴时未显示
keydown

像这样的东西应该有用

$('#txtnumber').change(function(e) {
     var x = e.target.value.replace(/\D/g, '').match(/(\d{3})(\d{3})(\d{4})/);
    e.target.value = x[1] + '-' + x[2] + '-' + x[3];
});
更新 始终在vuejs上工作。
更改
才是关键。显然不是在purejs和google chrome中(稍后我将测试其他浏览器)

出于某种原因,
change
事件仅在输入字段失去焦点时触发。 绑定到其他选项(“change keypress paste focus textInput input”(更改按键粘贴焦点文本输入)将触发该事件数次,这是不好的

下面的代码即使将内容粘贴到文本字段中也有效,并且只按预期触发一次

输入
事件来解救(或者简单地说,这是我们的事件)(但变化令人困惑)

和一个纯粹的js

document.getElementById('txtnumber').addEventListener('input', function(e) {
    var x = e.target.value.replace(/\D/g, '').match(/(\d{3})(\d{3})(\d{4})/);
    e.target.value = x[1] + '-' + x[2] + '-' + x[3];
});
最后一个例子
$('#txtnumber').bind('input',function(e){
如果(e.target.value.length==10){
varx=e.target.value.replace(/\D/g',).match(/(\D{3})(\D{3})(\D{4})/);
e、 target.value=x[1]+'-'+x[2]+'-'+x[3];
}
});




您需要捕获Ctrl键+V,然后插入-

var ctrlDown = false,
    ctrlKey = 17,
    cmdKey = 91,
    vKey = 86,
    cKey = 67;

$(document).keydown(function(e) {
    if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
}).keyup(function(e) {
    if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
});

/// your code + 
$(function () {

        $('#txtnumber').keydown(function (e) {
         var key = e.charCode || e.keyCode || 0;
         if (ctrlDown && (e.keyCode == vKey)){
                //insert the -'s on respective possition
         }
         else{
          $text = $(this); 
          if (key !== 8 && key !== 9) {
             if ($text.val().length === 3) {
                 $text.val($text.val() + '-');
             }
             if ($text.val().length === 7) {
                 $text.val($text.val() + '-');
             }
         }
         }
积分到>

var ctrlDown = false,
    ctrlKey = 17,
    cmdKey = 91,
    vKey = 86,
    cKey = 67;

$(document).keydown(function(e) {
    if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
}).keyup(function(e) {
    if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
});

/// your code + 
$(function () {

        $('#txtnumber').keydown(function (e) {
         var key = e.charCode || e.keyCode || 0;
         if (ctrlDown && (e.keyCode == vKey)){
                //insert the -'s on respective possition
         }
         else{
          $text = $(this); 
          if (key !== 8 && key !== 9) {
             if ($text.val().length === 3) {
                 $text.val($text.val() + '-');
             }
             if ($text.val().length === 7) {
                 $text.val($text.val() + '-');
             }
         }
         }