我正在尝试实现以下功能。我希望能够捕获分号字符的击键并将其更改为按下此键后自动添加新行。在代码中,它看起来像这样:
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 59){
e.preventDefault();
var tmpStyle = j$("#styleEditor").val();
tmpStyle += ";\n";
j$("#styleEditor").val(tmpStyle);
}
所以,首先我要抓住这个键(用“按键”事件),然后我停止它的正常行为,最后我在文本区域内容的末尾添加分号和新的行字符。
现在,ChromeFF上一切正常。然而,在IE9上,它的行为非常奇怪——它没有添加新行,而是添加了…空白。然后,如果退格此空白并键入“;”,它就会按预期工作。您可以通过首先键入一些其他字符,然后键入分号来重现它。
我还注意到删除e. prepentDefault()可以消除这个问题,尽管它会将两个分号粘贴到文本区域中。有人能帮我吗?
你可以看看我的小样DEMO
您可以删除e. previentDefault()
并使用事件keyup
而不是keypress
。
function checkForSemicolons(e) {
var style = j$("#styleEditor").value;
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 59) {
//e.preventDefault();
var tmpStyle = j$("#styleEditor").val();
tmpStyle += "\n";
j$("#styleEditor").val(tmpStyle);
}
}
小提琴:
http://jsfiddle.net/pmzzd56w/3/