[英]Jquery Trigger Events programmatically and wait until the action of previous event is complete to fire next one
我是jquery的新手。 假設我有一個10“a”標簽的列表,它們分別附加到事件處理程序mouseover,click,mouseout。
我想要做的是迭代所有“a”元素並使用jquery觸發器觸發這些事件。
我面臨的問題是,這些事件需要一段時間才能被觸發,因此當我運行代碼時,我只看到結果只在最后一個元素上發生變化。 而不是中間體。
$.each($("#styles a"), function(){
console.log("picked up " + $(this));
setTimeout(qwe($(this)), 2000);
});
function qwe(obj) {
console.log(obj.attr("id"));
$.when(obj.trigger("mouseover").trigger("click").trigger("mouseout"))
.then(function () {
console.log("Changing Result Value" + $("#textTag").text());
});
}
是否有辦法順序鏈接這些事件,即
僅當第一個元素的觸發動作完成時,才應觸發第二個元素的事件。 我嘗試搜索SO,但大多數文章圍繞觸發僅單個事件。 謝謝
為鏈的每個部分創建$ .Deferred對象,然后綁定它們以在實際觸發事件時解析:
callbacks = [$.Deferred(), $.Deferred(), $.Deferred()];
obj.on('mouseover', callbacks[0].resolve);
obj.on('click', callbacks[1].resolve);
obj.on('mouseout', callbacks[2].resolve);
$.when(callbacks).done(function() { console.log('all three have fired'); });
您需要其他邏輯來確保保留訂單 - 如果在mouseout之前未觸發click,則可能使用'reject'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.