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');
        }
    }); 
});

我想要一个关闭“按钮”,当你点击它时,它会清空所有文本的输入。我已经用下面的代码做到了这一点。但是,由于上面的代码在 keyup 事件上触发,它不会重新初始化,因此不会显示隐藏的结果。谢谢

$('#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在输入框中有其他不想运行的事件处理程序(简单触发将运行所有这些事件处理程序),您可以为您的事件指定一个命名空间(使用bind()而不是on()用于 1.7 之前的 jQuery)。

$("#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 回答