2012-11-01 32 views
0

我想自動更正領域的縮寫,但我的知識是有限的,所以試錯的一個小時後,我只有一個小腳本,只是將轉換爲大寫輸入。我想是這樣的:Formvalidation /更正您鍵入:聲母

  • 一個變成A.(大寫和以點結束)

  • ABC成爲ABC(大寫和分隔用一個點)

  • A1BC_ *變ABC (無其他字符允許的,大寫字母和一個圓點分隔)

什麼我是這樣的:

$(".hoofdletters").keyup(function(e) 
    { 
     $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); 
    }); 

更新

我不想浪費任何人的時間和打開一個新的話題,所以我在這裏嘗試。我自己也嘗試過一些東西,以便自動地將一個單詞中的每個單詞都用在句子中一切正常,但由於某種原因,空間被刪除。它與+ ''有關如果我刪除沒有任何工作了,如果我添加一個空格,我會在每封信後得到一個空格,如果我以這種方式離開它,則不允許空格。

任何人的任何建議?

$('.cap').bind('textchange', function (event, previousText) { 
     var val = this.value; 
     var newVal = ''; 
     val = val.split(' '); 
     for(var c=0; c < val.length; c++) { 
       newVal += val[c].substring(0,1).toUpperCase() + 
val[c].substring(1,val[c].length) + ''; // It has something to do with this line 
     } 
     this.value = newVal; 
    });​ 

回答

3

Fiddle

$(document).ready(function() { 
    $(".hoofdletters").focus(function() { 
     var current = $(".hoofdletters").val(); 
     $(".hoofdletters").keyup(function(e) { 
      var key = String.fromCharCode(e.keyCode); 
      console.log(e.keyCode); 
      if (key >= 'A' && key <= 'Z') { 
       current += key + "."; 
       this.value = current; 
      } 
      else if (e.keyCode == 8) { 
       current = $(".hoofdletters").val(); 

      } else { 
       current = ""; 
      } 
     }); 
     $(".hoofdletters").blur(function() { 
      var i = $(".hoofdletters").val(); 
      var last = i[i.length - 1]; 
      if (last != "." && i.length !== 0) { 
       this.value += "."; 
      } 
     }); 
     $('.hoofdletters').keydown(function(e) { 
      var i = $(".hoofdletters").val(); 
      if (e.keyCode == 8 && i.charAt(i.length - 1) == ".") { 
       $(".hoofdletters").val(i.slice(0, -1)); 
       current = $(".hoofdletters").val(); 
      } 
     }) 
    }); 
});​ 
+0

感謝您的努力,這也適用。我upvoted。 – mat

+0

很久以後,很抱歉讓你感到煩惱,但也有可能當某人刪除某些東西時,它會刪除一對大寫字母和一個點。例如。當有人輸入A.B.C.並單擊退格鍵,它將C刪除爲一對。我認爲這將是艱難的.. – mat

+1

@mat,扔在一起。希望它有幫助 – pmandell

1

由於這不是一個尋找人爲你編寫代碼的地方,讓我給你一個計劃,你可以按照解決這個問題。那麼,如果你一路遇到問題,你可以回來一個更具體的問題。

  • 您可以使用一個變量來存儲你的輸出,如果信是允許該變量開始爲空字符串
  • 通過所有的信件
    • 你循環,它的大寫版本添加到你的輸出變量
  • 端設置你的輸入框等於輸出變量的新值。
+0

護理對downvote的原因有何評論? – Jasper

1

這應該工作:

代碼

$(".hoofdletters").keydown(function(e) { 
    var c = String.fromCharCode(e.which).toUpperCase(); 
    if(c >= 'A' && c <= 'Z') { 
     this.value += c.toUpperCase() + "."; 
     return false; 
    } 
    return false; 
});​ 

演示http://jsfiddle.net/aHq4b/


注:以上策略有如下:●模仿。

  • 它完全阻斷常規操作,如刪除/退格等,因爲我們完全控制keydown事件,留下任何瀏覽器來執行。
  • 它總是附加在最後的字符,而不是在光標位置
  • 插入它不支持粘貼動作

下應該及時糾正那些爲好。它使用了觸發每當文本改變,而不管裝置(PASE /類型/文本拖放等)

代碼 zurb的textchange事件:

$('.hoofdletters').bind('textchange', function (event, previousText) { 
    var t = this.value; 
    var newValue = ''; 
    for(var i = 0; i < t.length; i++) { 
     var c = t.charAt(i).toUpperCase(); 
     if(c >= 'A' && c <= 'Z') { 
      newValue += c + '.'; 
     } 
    } 
    this.value = newValue; 
});​ 

演示http://jsfiddle.net/aHq4b/1/

+0

謝謝,這工作像一個魅力。我正在閱讀jquery.textchange.min究竟是什麼,因爲沒有它就無法正常工作。感謝我接受並贊成的幫助,非常感謝。 – mat

+0

我的榮幸。很高興幫助。 :-) – techfoobar

0

如果你喜歡一點較短的代碼,也許這會對你有用。

string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase(); 

例子如下...

var string = 'a'; 
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase(); 
=> A. 

var string = 'AbC'; 
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase(); 
=> A.B.C. 

var string = 'A1BC_*'; 
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase(); 
=> A.B.C.