2

入力を入力するとフィルタリングされるリストがあります。以下は、責任のあるjavascriptです。

$("#filter").keyup(function () {
    var filter = $(this).val(), count = 0;
    $(".filtered:first li").each(function () {    
        if ($(this).text().search(new RegExp(filter, "i")) < 0) {
            $(this).addClass("hidden");
        } else {
            $(this).removeClass("hidden");
            count++;
        }
    });
    $('.li-group').each(function(){
        if($(this).children(':visible').length == 0) {
           $(this).prev().addClass('hidden');
        }
        else {
            $(this).prev().removeClass('hidden');
        }
    }); 
});

クリックするとすべてのテキストの入力を空にする閉じる「ボタン」が必要です。私は以下のコードでこれを行いました。ただし、上記のコードはキーアップイベントで発生するため、再初期化されないため、非表示の結果は表示されません。ありがとう

$('#filter-close').click(function(){
        $('input#filter').val('');
});
4

2 に答える 2

3

keyupそのハンドラーを手動で呼び出す必要があります。したがって、最初に空の値を設定してから、新しい値に基づいて動作するハンドラーを呼び出します。

$('#filter-close').click(function(){
        $('input#filter').val('').keyup();
});

これは、イベントをトリガーするためのショートカット構文です。keyup

$('#filter-close').click(function(){
        $('input#filter').val('').trigger('keyup');
});

keyup入力ボックスに実行したくない他のイベントハンドラーがある場合(単純なトリガーですべてが実行されます)、イベントに名前空間を付けることができます( 1.7より古いjQueryのbind()代わりに使用します)。on()

$("#filter").on('keyup.doSearch', function () {
    var filter = $(this).val(), count = 0;
    /* the rest of your keyup handler code */
});

次に、次のようにトリガーできます。

$('#filter-close').click(function(){
        $('input#filter').val('').trigger('keyup.doSearch');
});
于 2012-05-09T08:55:32.657 に答える
0

非常に簡単な解決策は次のとおりです。

$('#filter-close').click(function(){
    $('input#filter').val('');
    $("#filter").keyup();
});
于 2012-05-09T08:55:41.813 に答える