代码之家  ›  专栏  ›  技术社区  ›  James Pitt

触发change()事件以刷新选择框会导致实时更改事件重新触发

  •  0
  • James Pitt  · 技术社区  · 12 年前

    我所做的很简单,所以我可能做错了。

    我有一个简单的选择框作为表的过滤器。我有一个重置过滤器的按钮。

    $("#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
        }});
    }
    

    正如你所看到的,重置按钮将选择选项设置回零,我在选择框上触发change()函数,使更改应用于选择框。

    这一切都有效,但仅视觉更改会触发上面的实时更改函数,从而导致第二次不必要的ajax调用。

    我曾想过用true/false变量来做这件事,让它运行一次,但无法让变量在正确的时间设置true/false,但我相信有一种更简单的方法。

    提前谢谢。

    2 回复  |  直到 12 年前
        1
  •  2
  •   ZKK    12 年前

    为什么不在实时操作处理程序中添加一个简单的检查来排除对值0的调用呢。

    if(filterPackage!=0)
    {
        $.ajax({url: 'ajaxAllGroups.php?filterPackage='+filterPackage, cache: false, success: function(main)
        {
            $('#fullPartsList').html(main);
        }});
    }
    
        2
  •  1
  •   adeneo    12 年前
    $(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);
    }