1

我正在使用此功能以使用 Safari 和 Chrome 替换 contentEditable div 上的换行符<DIV>New Divs</DIV><BR>

$("#form_description").live("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
  var selection = window.getSelection(),
      range = selection.getRangeAt(0),
      br = document.createElement("br");
  range.deleteContents();
  range.insertNode(br);
  range.setStartAfter(br);
  range.setEndAfter(br);
  range.collapse(false);
  selection.removeAllRanges();
  selection.addRange(range);
  return false;
}
}
});

问题是,当我在 an 内输入<UL><LI>Something</LI></UL>并按“return”键时,我不想得到 a <BR>,所以我可以继续列表...

如果我在一个LI元素中,我怎么能创造一个条件让该功能不工作?

用我的答案编辑:

好的,我已经做到了,但是如果您对代码有任何评论,欢迎您:

$("#form_description").live("keypress", function(e){
if (e.which == 13) {

  node = document.getSelection().anchorNode;
  nodeName = node.parentNode.nodeName.toLowerCase();

  if ((nodeName != "li") && (nodeName != "blockquote")) {
... etc }
4

1 回答 1

1

首先,keyup用作事件名称,keypress 仅适用于 Firefox。

其次,e.which 并不总是可用的。主要使用 e.keyCode,然后回退到 e.which:

var code = e.keyCode || e.which;
if (code == 13) {
  // your code here..
}

第三,如果您需要取消按键触发的默认事件,您可能需要在事件处理程序例程中添加 preventDefault() 。确保它是第一行。

function(e){
   e.preventDefault();
 ..
}
于 2011-05-17T06:50:10.077 回答