1

SafariとChromeを使用してcontentEditabledivのブレークライン<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;
}
}
});

問題は、内に入力し<UL><LI>Something</LI></UL>て「return」キーを押したときに、を取得したくない<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。これは常に利用できるとは限りません。主にe.keyCodeを使用し、e.whichにフォールバックします。

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

第3に、キーを押したときに発生したデフォルトイベントをキャンセルする必要がある場合は、イベントハンドラルーチン内にpreventDefault()をスローすることをお勧めします。それが最初の行であることを確認してください。

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