2015-10-07 62 views
5

我试图在特定字符串中插入其他字符。在字符串的错误索引中插入字符

function sample(x) { 
 
      if (x.value.length > 2 && x.value.length < 5) { 
 
       var first = x.value.substring(0, 2) + "'"; 
 
       var second = x.value.substring(2, x.value.length) + "''"; 
 
       x.value = first + "" + second ; }   
 
}
<input id="txt" type="text" placeholder="onkeypress" onkeypress="sample(this)" value="" /><br /> 
 
<input id="txt1" type="text" placeholder="onchange" onchange="sample(this)" value="" />

通过使用htmlinput onchange属性,代码运行完全。但是,这也可以运行onkeypress属性?如果输入值是1006,结果应该是10'06''。帮帮我。谢谢。

+0

这很奇怪。对于我的代码片段,只有“onkeypress”输入有效。 “onchange”输入不起作用。我正在使用firefox – Magus

+0

@Magus你看过onkeypress的输出吗?它是10'0'6而不是10'06''。另一方面,onchange类似于onblur属性。它只在焦点更改时触发JavaScript代码。 – eirishainjel

+0

@RayonDabre所以它不会在'onkeypress'上工作? – eirishainjel

回答

3

试试这个:

你需要操纵字符串之前更换quotes('/")。还使用keyup事件。请参阅this以了解每个事件的目的。 onkeyup当键被释放

function sample(x) { 
 
    x.value = x.value.replace(/[\'\"]/g, ''); 
 
    if (x.value.length > 2 && x.value.length < 5) { 
 
    var first = x.value.substring(0, 2) + "'"; 
 
    var second = x.value.substring(2, x.value.length) + "''"; 
 
    x.value = first + "" + second; 
 
    } 
 
}
<input id="txt" type="text" placeholder="onkeypress" onkeyup="sample(this)" value="" /> 
 
<br/> 
 
<input id="txt1" type="text" placeholder="onchange" onchange="sample(this)" value="" />

+1

“按键事件表示正在输入的字符”。谢谢! :) – eirishainjel

1

平变化和onkeypress事件之间的差被烧制,

  1. 平变化检测在长度和值的变化时,控制是从元素发布
  2. onkeypress检测按键上的长度变化,但在另一按键上变化。长度从这意味着如果我输入4567,而输入7,则长度为0,1,2,3,但值为456即使输入中存在7。但是,当你按下这表明4567

你可以看到,在这里发生的http://codepen.io/anon/pen/XmRydE

function sample(x) { 
 
    console.log(x.value); 
 
    console.log(x.value.length); 
 
      if (x.value.length > 2 && x.value.length < 5) { 
 
       var first = x.value.substring(0, 2) + "'"; 
 
       var second = x.value.substring(2, x.value.length) + "''"; 
 
       x.value = first + "" + second ; }   
 
\t \t } 
 

 
function sampleKeyPress(x) { 
 
    console.log(x.value); 
 
    console.log(x.value.length); 
 
      if (x.value.length >= 4 && x.value.length < 5) { 
 
       var first = x.value.substring(0, 2) + "'"; 
 
       var second = x.value.substring(2, x.value.length) + "''"; 
 
       x.value = first + "" + second ; }   
 
\t \t }
<input id="txt" type="text" placeholder="onkeypress" onkeypress="sampleKeyPress(this)" value="" /><br /> 
 
<input id="txt1" type="text" placeholder="onchange" onchange="sample(this)" value="" />

2

我看到这个已经回答正确,但这里是我的起飞。

添加超时到格式化功能会给用户一个机会,在格式化踢前输入4个字符,并可能混淆用户:

function sample(x) { 
    setTimeout(function() { 
    if (x.value.length > 2 && x.value.length < 5) { 
     var first = x.value.substring(0, 2) + "'"; 
     var second = x.value.substring(2, x.value.length) + "\""; 
     x.value = first + second; 
    } 
    }, 1500); // this is the timeout value in milliseconds 
} 

请参见本CodePen的工作例如: http://codepen.io/Tiketti/pen/YyVRwb?editors=101

+0

哇。这很棒!谢谢随机用户:) – eirishainjel