重新初始化用户点击div时触发keyup事件的代码?

时间:2012-05-09 08:51:38

标签: jquery

我有一个列表,在您输入输入时会对其进行过滤。以下是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('');
});

2 个答案:

答案 0 :(得分:3)

您应该手动调用其keyup处理程序。首先设置空值,然后调用将根据新值执行的处理程序:

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

这是trigger keyup事件的快捷语法:

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

如果输入框中有其他keyup事件处理程序您不想运行(简单触发将运行所有这些事件处理程序),您可以为事件指定namespace(使用{对于早于1.7的jQuery,{1}}代替bind()

on()

然后你可以像这样触发它:

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

答案 1 :(得分:0)

非常简单的解决方案是:

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