2015-10-07 42 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