2012-09-21 25 views
0

我正在使用jquery tagsInput plugin,我需要动态修改查询(删除查询或输入新查询),而不必在与tagsInput插件相关的搜索框中输入内容。jQuery - 触发多个事件一个接一个

我在这里的问题是,我想在第一次触发退格事件然后进入下一个事件。这是代码。

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 
} 

但是只有backspace事件触发了上面的代码。我怎样才能让事件进入工作?

任何人都可以指出我所做的错误吗?

谢谢!

+1

是有你在一个循环中创建多个事件,而不是只建立一个和重用它的理由? – jbabey

+0

原因是我是一个jQuery新手:) – rnk

回答

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

1

这里有一个问题:

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

.val()回报你的jQuery元素的字符串值,它不是一个可链接的方法。字符串没有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 
} 
+0

我试过了。仍然输入事件不会触发。我已更新我的代码,请检查它 – rnk

+0

@rnk您修复多个事件是不正确的。我将编辑我的答案以包含正确的修复。 – jbabey

+1

@jbabey,你说'$(“#input-search_tag”)。val(“food”)。trigger(e)'会导致错误,但不会按照[docs](http:/ /api.jquery.com/val/)这里没有问题,因为它被用作setter,而不是getter。 (参见[demo](http://jsbin.com/equjuc/1)) –