0

私がやっていることは単純なので、おそらく間違っています。

テーブルのフィルターとして単純な選択ボックスがあります。フィルターをリセットするボタンがあります。

$("#package").live('change', function()
{   
    filterPackage = $("#package").val();

    $.ajax({url: 'ajaxAllGroups.php?filterPackage='+filterPackage, cache: false, success: function(main)
    {
        $('#fullPartsList').html(main);
    }});
});

function unfilter()
{
    $.ajax({url: 'ajaxAllGroups.php?filterPackage=0', cache: false, success: function(main)
    {
        $('#fullPartsList').html(main); // Send ajax content to table

        $('#package').val(0); // Reset option to default
        $("#package").change(); // Force visual change to select box
    }});
}

ご覧のとおり、リセット ボタンは選択オプションを 0 に戻し、選択で change() 関数をトリガーして視覚的に変更を選択ボックスに適用します。

それはすべて機能しますが、そのビジュアルのみの変更により、上記のライブ変更機能がトリガーされ、不要な ajax 呼び出しが 2 回発生します。

true/false変数を使用してこれを実行して1回実行することを考えましたが、変数を適切なタイミングでtrue/falseに設定できませんでしたが、もっと簡単な方法があると確信しています。

前もって感謝します。

4

2 に答える 2

2

ライブアクションハンドラーに簡単なチェックを追加して、値0の呼び出しを除外してみませんか。

if(filterPackage!=0)
{
    $.ajax({url: 'ajaxAllGroups.php?filterPackage='+filterPackage, cache: false, success: function(main)
    {
        $('#fullPartsList').html(main);
    }});
}
于 2013-02-26T13:19:11.597 に答える
1
$(document).on('change', '#package', function() {
    doFilter(this.value);
});

function doFilter(pkg) {
    $.ajax({
        url : 'ajaxAllGroups.php',
        data: {filterPackage: pkg}
    }).done(function(main) {
        $('#fullPartsList').html(main);
    });
}

function unfilter() {
    $('#package').val(0);
    doFilter(0);
}
于 2013-02-26T13:18:41.830 に答える