0

この議論に基づいて、以下のコードを JS コードに追加して、keyup または delay の代わりにエンター キーを押すことでフィルタリングをトリガーできるようにしました。

jQuery.fn.dataTableExt.oApi.fnSetFilteringPressEnter = function (oSettings) {
    var _that = this;

    this.each(function (i) {
        $.fn.dataTableExt.iApiIndex = i;
        var $this = this;
        var anControl = $('input', _that.fnSettings().aanFeatures.f);
        anControl.unbind('keyup').bind('keypress', function (e) {
            if (e.which == 13) {
                $.fn.dataTableExt.iApiIndex = i;
                _that.fnFilter(anControl.val());
            }
        });
        return this;
    });
    return this;
}

/* Example call */
$(document).ready(function() {
    $('.dataTable').dataTable().fnSetFilteringPressEnter();
} );

今私がやりたいことは、ユーザーが検索バーからキーワードを削除したときに、テーブルを再描画したいということです。現在、Enter ボタンを押さないと再描画されません。どうすればこの結果を達成できますか?

4

2 に答える 2

1

キーを押すだけでトリガーするのとは異なり、キーボードのキーアップイベントで行うのは安全だと思いますenter

anControl.off('keyup').on('keypress', function (e) {
        $.fn.dataTableExt.iApiIndex = i;
        _that.fnFilter(anControl.val());
});

また、委任には and の代わりにandon()を使用したことに注意してください。これらは jQuery 1.7 の時点で廃止されていますoff()bindunbind

または、テキスト ボックスのすべてのキーワードが削除される、特定のケースに対して完全に異なるハンドラーを作成することもできます。

    anControl.off('keyup').on('keypress', function (e) {
        if (e.which == 13) {
            $.fn.dataTableExt.iApiIndex = i;
            _that.fnFilter(anControl.val());
        }
        if(anControl.val().length == 0) {
               //redraw table
        }

    });
于 2012-05-15T08:19:29.717 に答える
0

.blurjqueryのイベントを使用して、必要なものを達成できるかもしれません。テキストボックスがフォーカスを失ったときはいつでも、次のようにフィルターを空の文字列に設定するだけです。

this.each(function (i) {
        $.fn.dataTableExt.iApiIndex = i;
        var $this = this;
        var anControl = $('input', _that.fnSettings().aanFeatures.f);
        anControl.unbind('keyup').bind('keypress', function (e) {
            if (e.which == 13) {
                $.fn.dataTableExt.iApiIndex = i;
                _that.fnFilter(anControl.val());
            }
        });
        anControl.blur(function(){
            _that.fnFilter('');
        });
        return this;
    });
    return this;
于 2012-05-15T08:27:46.670 に答える