jQuery - 逐个触发多个事件

时间:2012-09-21 12:45:42

标签: javascript dom jquery

我正在使用jquery tagsInput plugin,我需要动态修改查询(删除查询或输入新查询),而不实际输入与tagsInput插件相关联的搜索框。

我的问题是,我想首先触发退格事件然后输入事件。这是代码。

function triggering_events() {
    $(".tag").each(function() {
        var e = jQuery.Event("keydown");
        e.keyCode = 8;
        e.which = 8;
        $("#input-search_tag").trigger(e); //triggering backspace event
    });
    var input = $("#input-search_tag");
    input.val("food");
    input.trigger(e); //triggering enter event
}

但是只有退格事件才会从上面的代码中触发。如何让参加活动的工作顺利进行?

有人能指出我做过的错误吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这里有一个问题:

$("#input-search_tag").val("food").trigger(e); //triggering enter event

.val()返回jquery Element的字符串值,它不是可链接的方法。字符串没有trigger方法。

您可以通过将其拆分为两个调用来解决此问题:

var input = $("#input-search_tag");
input.val("food");
input.trigger(e); // triggering enter event

或使用.end()

$("#input-search_tag").val("food").end().trigger(e); //triggering enter event

编辑:将所有内容放在一起,同时重复使用一个事件而不是创建倍数:

function triggering_events() {
    var e = jQuery.Event("keydown");

    e.which = 8;
    $(".tag").each(function() {
        $("#input-search_tag").trigger(e); // triggering backspace event
    });

    e.which = 13;
    $("#input-search_tag").val("food").end().trigger(e); // triggering enter event
}

答案 1 :(得分:1)

您可以尝试使用removeTagaddTag方法删除并添加标记:

function triggering_events() {

    var 
        idInput = 'input-search',
        input = $("#" + idInput);

    $("#"+idInput+"_tagsinput .tag").each(function() {
        var tag = $.trim($(this).find('span:eq(0)').text());
        input.removeTag(tag);
    });

    input.addTag("food");
}

run