在我的jQuery脚本中,我需要组合框:
focus
事件中,运行代码以便在用户更改此<select>
内部的值之前获取所有值。change
事件中,运行代码取决于focus
事件期间构建的json对象脚本
var previousDataObject = [];
$('body').on('focus', "select.my-combobox", function () {
comboboxChangeInit(); // it fills previousDataObject up;
}).on( "change", "select.my-combobox", function(){
//here code using previousDataObject
});
基本jQuery行为将在用户操作上运行focus
和change
。
对于我来说,我需要等待comboboxChangeInit()
完全填充previousDataObject才能在change
事件上运行代码。
如何创建一种侦听器来执行此操作?
答案 0 :(得分:0)
您可以改用trigger
,所以
$('body').on('focus', "select.my-combobox", function () {
comboboxChangeInit(); // it fills previousDataObject up;
$(this).trigger('change')
}).on( "change", "select.my-combobox", function(){
//here code using previousDataObject
});
trigger
将触发作为参数传递的事件,请检查jQuery Docs
答案 1 :(得分:0)
我发现了一个基于递延对象的解决方案,谢谢this question。
jQuery
var previousDataObject = [];
var previousDataDeferred;
$('body').on('focus', "select.my-combobox", function () {
comboboxChangeInit(); // it fills previousDataObject up.
}).on( "change", "select.my-combobox", function(){
var myObject = $(this);
$.when( previousDataDeferred ).done(function(){
//Display spinner for example
//here code using myObject and previousDataObject.
//Remove spinner and reset previousDataObject
});
});
function comboboxChangeInit(){
previousDataDeferred = $.Deferred();
//Code to fill previousDataObject up.
previousDataDeferred.resolve();
});