2013-03-12 80 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/,它会显示这个工作。