编辑框:禁用用户格式,但添加我自己的格式

时间:2011-09-22 20:45:37

标签: javascript jquery contenteditable

我知道HTML中的富文本框是一个雷区,但我希望这种特殊情况不会太棘手。我想要一个用户无法格式化的文本框,但通过脚本我可以添加一些光格式(因此textarea不起作用)。

我的第一个想法是我可以使用contentEditable,如果用户没有工具栏,他们做不了多少,但仍然有Ctrl + B,Ctrl + I等组合。所以我这样做了:

ctrlHandler = function (event) {
    event.preventDefault();
};

this.keydown(function (event) {
    if (event.ctrlKey) {
        $(this).bind('keypress', ctrlHandler);
    }
});
this.keyup(function (event) {
    if (event.ctrlKey) {
        $(this).unbind('keypress', ctrlHandler);
    }
});

因此,当按下Ctrl键(keydown)时,事件处理程序绑定到keypress,这会阻止默认值,当它被释放时,事件处理程序是未绑定的。聪明,是吗? (我稍后会研究如何处理剪切/复制/粘贴等组合。)这样,事件处理程序被正确绑定,但event.preventDefault()实际上并没有阻止默认值!文本变得粗体/斜体/下划线,就好像我什么也没做。格式更改似乎发生在事件触发之前。使用keydownkeyup代替keypress也不起作用。任何人都可以想到另一种(跨浏览器)方法,或者如何使这个方法有效?

1 个答案:

答案 0 :(得分:0)

啊哈!我似乎误解了event.ctrlKey的作用。按Ctrl + B不会触发两个keydown事件......它会在event.ctrlKey设置为true的情况下触发一个事件。所以if (event.ctrlKey) event.preventDefault()会做到这一点。尚未在所有浏览器中测试过。