I'm using this code:
$newFilter = getNewFilter();
$fieldDropdown = getFieldDropdown(fieldData.field);
$newFilter.append($fieldDropdown);
$typeDropdown = getTypeDropdown($fieldDropdown.data('zenfilter').fieldId, $fieldDropdown.val(), fieldData.type);
$newFilter.append($typeDropdown);
$inputBox = getInputBox($typeDropdown.data('zenfilter').fieldId, $typeDropdown.data('zenfilter').fieldType, $typeDropdown.val(), fieldData.value);
$newFilter.append($inputBox);
And I get a error ($fieldDropdown.data("zenfilter") is null) on the fourth line ($typeDropdown = getTypeDropdown...). This is because the getFieldDropdown didn't finished execution yet. How can I call the functions lineally? Thanks a lot.
Edit: Added the getFieldDropdown function:
getFieldDropdown = function (populateData) {
var $hiddenInput, i, $obj;
$hiddenInput = $('<input>', {
name: defaults.paramName + '[' + nFilters + '][field]',
type: 'hidden'
});
$obj = $('<select></select>', {
'class': classesHash.individualField,
name: defaults.paramName + '[' + nFilters + '][fakefield]'
}).
data('zenfilter', { fieldId: nFilters }).
addOption(fieldOptions).
sortOptions(true).
selectOptions('').
change(function(){
$(this).nextAll('select, div.' + classesHash.individualInputContainer).detach();
$(this).removeClass(classesHash.incompleteField).after(getTypeDropdown($(this).data('zenfilter').fieldId, $(this).val()));
$(this).prev('input[type=hidden]').val(defaults.data[$(this).val()].fieldname);
});
if (populateData) {
for (i = 0; i < defaults.data.length; i += 1) {
if (defaults.data[i].fieldname === populateData) {
$obj.selectOptions(String(i));
}
}
}
return $hiddenInput.add($obj);
};
(addOptions, sortOptions and selectOptions are just a plugin's methods to manipulate selects easier, they don't do any AJAX)