2010-09-16 57 views
9

我正在使用onkeyup="this.value=this.value.toUpperCase();"以大寫形式更改輸入文本值。這是工作,但我的需要是改變輸入框中的單個字母,而不使用鼠標事件。如果我使用左箭頭鍵將光標向後移動onkeyup事件被觸發並且光標移動結束。如何修改這個腳本,這樣我可以使用箭頭鍵向後導航和如何在輸入時將輸入更改爲大寫

之間當前的代碼看起來像這樣的地方修改文本...

<h:inputText value="#{_input.response}" autocomplete="off" onmouseover="this.focus();" onkeyup="this.value=this.value.toUpperCase();"/> 
+0

如果你對元素模糊事件做了這些,會容易得多。 – 2010-09-16 08:33:22

+0

作爲一個最終用戶,我很高興我不使用你的應用程序,否則我將不得不停止使用它,如果它做了這樣的事情!當我打字時,我感到最惱人的是讓它改變了我。如果你需要大寫字母的值,在發送/提交等之後執行它 - 爲什麼在我輸入時糾纏我?我不確定你在做什麼違反了軟件建設的一些基本規則/法律,但如果沒有,恕我直言,應該有一個在這些線路上。 – InSane 2010-09-16 08:35:44

+0

同意在Sane。我可能會一直打我的大寫鎖鍵,以扭轉那些令人討厭的上限:P – 2010-09-16 08:37:24

回答

28

如何CSS:

input.upper { text-transform: uppercase; } 

備註:這仍然會將值發送到用戶輸入的服務器,而不是大寫。

+0

我不確定輸入是否實際保持大寫。這只是一種風格伎倆,還是文本實際上轉換爲大寫(比如說,如果將表單的內容寫入數據庫)? – 2010-09-16 08:36:13

+3

設置爲大寫,然後在收到它時將其更改爲服務器端。 – 2010-09-16 08:45:37

+2

無論如何,你必須在服務器上使用大寫字母。如果JS關閉並且您依賴大寫字母,則必須在服務器上驗證它 – mplungjan 2010-09-16 08:59:11

0

您可以檢查在onkeyup中只按了哪個鍵,並且只能處理按鍵a-z的過程。應該很容易,因爲鍵碼是數字的,您可以檢查鍵碼是否在(65)和z(90)的鍵碼之間。

0

就像kristoffer說的,最好使用風格,並轉換serverside。 還有一個jQuery插件強制大寫: http://plugins.jquery.com/plugin-tags/uppercase

<html> 
    <head> 
     <style> 
      input.upc { text-transform: uppercase; } 
     </style> 
     <script> 
      // thanks 2 'm2pc' : http://www.webdeveloper.com/forum/showpost.php?s=9f258cba84d461026bb9ed478e86776d&p=423545&postcount=3 
      function doGetCaretPosition (oField) { 
       var iCaretPos = 0; 
       if (document.selection) // IE Support 
        { 
        oField.focus(); 
        var oSel = document.selection.createRange(); 
        // Move selection start to 0 position 
        oSel.moveStart ('character', -oField.value.length); 
        // The caret position is selection length 
        iCaretPos = oSel.text.length; 
        } 
       else 
        if (oField.selectionStart || oField.selectionStart == '0') // Firefox support 
         iCaretPos = oField.selectionStart; 
       return (iCaretPos); 
       } 
      function doSetCaretPosition (oField, iCaretPos) 
       { 
       if (document.selection) // IE Support 
        { 
        oField.focus(); 
        var oSel = document.selection.createRange(); 
        oSel.moveStart ('character', -oField.value.length); 
        oSel.moveStart ('character', iCaretPos); 
        oSel.moveEnd ('character', 0); 
        oSel.select(); 
        } 
       else 
        if (oField.selectionStart || oField.selectionStart == '0') // Firefox support 
         { 
         oField.selectionStart = iCaretPos; 
         oField.selectionEnd = iCaretPos; 
         oField.focus(); 
         } 
       } 
      function forceupper(o) 
       { 
       var x = doGetCaretPosition(o); 
       o.value=o.value.toUpperCase(); 
       doSetCaretPosition(o,x); 
       } 
     </script> 
    </head> 
    <body> 
     <form method="get" target="#"> 
      Fld 1 : browser shows upper-case, form submits mixed-case<br> 
      <input name="f1" id="idf1" class="upc" type="text" value="X"><br> 
      Fld 2 : javascript updates text to uppercase, form submits uppercase<br> 
      <input name="f2" id="idf2" class="js" type="text" value="Y" onkeyup="forceupper(this);"><br> 
      <input type="submit" value="send"> 
     </form> 
    </body> 
</html> 
3

的樣本可能是:

<p:inputText id="nombres" 
      value="#{userController.user.nombres}" 
      style="text-transform: uppercase" /> 
+0

歡迎來到SO Juan。您應該添加4個空格來突出顯示代碼或將它們放在'之間,而不是試圖爲'<' & '>'提供一個很好的渲染。 – j0k 2012-09-05 15:46:44

-1

引導3具有變換文本組件文本市值類的轉換類。

<p class="text-lowercase">Lowercased text.</p> 
<p class="text-uppercase">Uppercased text.</p> 
<p class="text-capitalize">Capitalized text.</p>