2012-09-21 36 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)) –