0

私はここにいくつかのコードを持っています:

$(document).ready(function() {
$("#querybox").live("keyup", function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13) {
       $("#querybox").blur();
    }
    else {
        search(document.getElementById('querybox').value);
    }

    /*if (document.getElementById('querybox').value == "") {
        $("center").removeHighlight();  
    }*/
});
});

keyUpを検出し、それを使用して何かを検索します。問題は、#queryboxが空になるまでバックスペースされると、ページ全体がクラッシュし、「Awwww、Snap!」が表示されることです。GoogleChromeからのメッセージ。

jQueryv1.7.2を使用しています

Thx 100万!

編集

また、search()関数が本文のテキストを強調表示することにも注意してください(コメント付きのセクションに注意してください)。ハイライトプラグインを使用しています...


Fnを検索:

function search(query) {
    $("center").removeHighlight();
    $(".paragraph").highlight(query);
    $(".highlight").each(function (index) {
        $(this).attr("id", "tmpforgoToByClassScrollhighlight" + index);
    });
}
4

2 に答える 2

1

.on(...)代わりに使用してみてください:

$("#querybox").on("keyup", function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    var queryBox = this;
    if (code === 13) {   // PRESSED ENTER
       queryBox.blur();
    }
    else {
        search(queryBox.val());
    }
});

更新後:

検索機能をどのように実行するかを詳しく調べたいと思うかもしれません。

これらのjQuery要素の一部をキャッシュして、キーアップごとに何度も選択し続けないようにします。

また、すべてのコードを調べているわけではありませんが、空の文字列を許可しない.highlightバグがそこにある可能性があります。そのため、Webサイトがブラウザのクラッシュを引き起こしています。

于 2012-07-12T13:29:54.013 に答える
0

代わりに.delegate()を使用する必要があります

$(document).ready(function() {
//It will be a good advice to replace body with a parent element of #querybox
$("body").delegate("#querybox","keyup", function(e) {
 var code = (e.keyCode ? e.keyCode : e.which);
  if (code == 13) {
    $("#querybox").blur();
  }
  else {
    search(document.getElementById('querybox').value);
  }

  /*if (document.getElementById('querybox').value == "") {
    $("center").removeHighlight();  
   }*/
 });
});
于 2012-07-12T13:27:19.473 に答える