2013-03-12 90 views
3

我有一個輸入字段,用戶將填寫,我想在輸入時自動大寫每個單詞的首字母。但是,如果他們手動刪除大寫字母並將其替換爲小寫字母,我希望保持原樣(基本上大寫字母是我們推薦的,但不是必需的)。我在執行某些操作時會遇到麻煩,這些操作會留下他們手動輸入的字母,而不會更改它們。在句子中大寫首字母大寫,手工替換除外

這裏是我的代碼以及Jsfiddle link

<input class="capitalize" /> 

和JS:

lastClick = 0; 

$(document).ready(function() { 
$(".capitalize").keyup(function() { 
      var key = event.keyCode || event.charCode; 
     if (!(lastClick == 8 || lastClick == 46)) { 
       //checks if last click was delete or backspace 
      str = $(this).val(); 
         //Replace first letter of each word with upper-case version. 
      $(this).val(str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}));    
     } 
     lastClick = key; 
    }); 
}); 

我還沒有允許保留用戶的手動校正,但因爲它是你可以在的jsfiddle看到輸入跳四周,無法正常工作。任何人都可以幫助我或推薦一個最佳的方式來做到這一點?謝謝。

+2

在你的代碼'event'是'undefined':( 「資本」)。 '$ KEYUP(函數(事件){'http://jsfiddle.net/j3nGm/ – undefined 2013-03-12 00:47:04

+0

這不是問題 - 我已經登錄到控制檯,並正確地註冊了密鑰#。問題是不幸的實際執行。 – user1436111 2013-03-12 01:05:06

+0

+1好問題,並措辭良好。 – iOnline247 2013-03-15 03:11:33

回答

1
$(document).ready(function() { 
    var last; 

    $(".capitalize").on('keyup', function(event) { 
     var key = event.keyCode || event.which, 
      pos = this.value.length, 
      value = this.value; 

     if (pos == 1 || last == 32 && (last !== 8 || last !== 46)) { 
      this.value = value.substring(0, pos - 1) + 
         value.substring(pos - 1).toUpperCase(); 
     } 

     last = key; 
    }); 
}); 

http://jsfiddle.net/userdude/tsUnH/1

+1

謝謝..但這似乎根本沒有大寫,有時只有第二 – user1436111 2013-03-12 01:06:35

+0

瀏覽器?火狐它工作的很好 – 2013-03-12 01:07:26

+0

Chrome!真的很奇怪 – user1436111 2013-03-12 01:09:36

1
$(document).ready(function() { 

    $(".capitalize") 
    .keyup(function(event) { 
     var key = event.keyCode || event.charCode; 
     // store the key which was just pressed 
     $(this).data('last-key', key); 
    }) 
    .keypress(function(event) { 
     var key = event.keyCode || event.charCode; 
     var lastKey = $(this).data('last-key') ? $(this).data('last-key') : 0; // we store the previous action 
     var $this = $(this); // local reference to the text input 
     var str = $this.val(); // local copy of what our value is 
     var pos = str.length; 
     if(null !== String.fromCharCode(event.which).match(/[a-z]/g)) { 
      if ((pos == 0 || str.substr(pos - 1) == " ") && (!(lastKey == 8 || lastKey == 46))) { 
       event.preventDefault(); 
       $this.val($this.val() + String.fromCharCode(event.which).toUpperCase()); 
      } 
     } 
     // store the key which was just pressed 
     $(this).data('last-key', key); 
    }); 

}); 

我已經更新了你的提琴http://jsfiddle.net/nB4cj/4/,它會顯示這個工作。