2016-07-11 12 views
2

私が取り組んでいるプロジェクトの検索ツールを構築しようとしています。基本的に、私はページ上の項目のリストをフィルタリングし、一致するものを表示しています。私が抱えている問題は、ページネーションを使用していて、最初の文字が入力されるたびに2番目の文字を入力するまでページングイベントが発生しないということです。最初の文字が入力に入力されたとき、下部のcontext.paginate()およびcontext.createPages(4)の関数は起動しません。それ以外は素晴らしい作品ですが、それはちょっとした迷惑なのですが、その特定の出来事がなぜすぐには発射されないのか分かりません。 unwrapを含むすべてのものが、直近の2つの関数ではなくただちに動作します。誰でも、なぜそれがあるのか​​についてのアイデアはありますか?最初の文字が入力された直後にjquery keyupイベントを発生させるにはどうすればいいですか?

$(this).on("keyup change", function() { 
    var searchVal; 
    console.log(searchVal); 
    radios = $(section).prev(".filterform").find("input[type='radio']"); 
    //Find which search filter option is checked and use that class for the find 
    for (var i = 0; i < radios.length; i++) { 
     if (radios[i].name && $(radios[i]).prop("checked")) { 
      searchVal = radios[i].value; 
     } 
    } 
    var filter = $(this).val(); 
    if (filter) { 
     $(section).find("." + searchVal + ":not(:contains(" + filter +  "))").closest(".projects").slideUp(); 
     $(section).find("." + searchVal + ":contains(" + filter + ")").closest(".projects").slideDown(); 
    } else { 
     $(section).find(".projects").slideDown(); 
    } 
    $(section).find(".pages > .projects").unwrap(); 
    context.createPages(4); 
    context.paginate(); 
}); 
+0

あなたのソリューションのすべては素晴らしいですが、私はいくつかの掘り出し物を見つけましたが、犯人を見つけましたが、まだ解決できません。私はキーを押した後に隠されていない項目の現在の数を取得する必要があります。問題は、最初の文字の後に番号を更新しないで、イベントが発生しているのに間違ったデータを出してしまうことです。ここで私の項目変数です:$(this._element).find( "。projects:visible")私はこれをkeypressで更新しようとしていますが、すぐにはしません –

+0

私はページ分割機能のために500msのタイムアウトを追加して解決しました。 –

答えて

1
element.keypress(function(e){ 
//... 
if(this.selectionStart==0){ 
    //Do something 
} 

}

+0

あなたの推論を説明できますか? –

+0

あなたは "キーアップ"を使用しています。これは、指の先端をキーの上に置かない限り、機能しないことを意味します。キーアップ機能は異なります。 – Ranjan

0

試行this"#target" insteand等IDセレクタを使用する:

$("#target").keypress(function() { 
//your code 
}); 
0

keyPressed or keyUp , keyDown event 

を使用して、キージ読み取りますDOMを実行することなく、直感的に実行できます。 あなたは、あなたがする勇気があるなら

は、その文字列を維持大文字/小文字を区別するためのイベントオブジェクトの

.shiftKey 

属性、一緒に行くことができます。 しかし、次のイベントでは、あなたのDOMは最初の文字を保持しています。そして、この "ハイブリッド"のアプローチで行くことができます。

+0

これは良い解決策ですが、私の検索は大文字と小文字の区別に依存します。文字の大文字小文字を検出して保持する方法はありますか? –

0

他にも同様の問題があるかもしれません。私は私の「キーアップ」イベント内で私のページ機能のタイムアウトを500ms追加することでした。

setTimeout(function() { 
    $(section).find(".pages > .projects").unwrap(); 
    context.createPages(4); 
    context.paginate(); 
}, 500); 
関連する問題