Я написал несколько javascript, используя jQuery, чтобы заменить любые избранные списки альтернативой div и ul, чтобы он дал мне еще несколько элементов управления стилями и сделал выпадающие списки похожими на один и тот же кросс-браузер , Ниже код работает на 99% для меня, но у меня есть одна проблема. В нижней части кода мне пришлось использовать .delay(), чтобы сообщить код, чтобы дождаться цикла .each() выше, чтобы закончить выполнение его действия. Проблема заключается в том, что по крайней мере одна секунда остается до тех пор, пока не произойдет замена, за исключением вспышки старых блоков выбора. Также я могу предвидеть еще одну проблему: если для завершения цикла each() требуется больше одной секунды ...jQuery ждать завершения выполнения кода
Как я могу получить код внизу, чтобы работать только после запуска и завершения каждого цикла , Также я приветствую любую оптимизацию остальной части кода.
EDIT: Некоторые HTML были удалены из кода, так что я pastebinned его: http://pastebin.com/4HFLjHE1
// Check when ready
$(function() {
// Find dropdowns
$("select.dropdownreplace").each(function() {replaceDropDown(this);});
// If document clicked anywhere hide drop downs
$(document).click(function(event){
$("div.dropdownreplace ul").hide();
});
});
function replaceDropDown(that) {
// Create HTML for new drop down
// hidden field
var hiddeninput = $('');
// div
var dropdowndiv = $(''+$(":selected", that).text()+'
');
// loop through values and make li's
$("option", that).each(function() {
$("ul", dropdowndiv).append(''+$(this).val()+''+$(this).text()+' ');
// set click handler for this drop down
$(dropdowndiv).click(function() {
$("ul", this).show();
return false;
});
// set click handler for link items
$("a", dropdowndiv).click(function() {
// Get name of hidden input
var nameofdropdown = $(this).parent().parent().parent().attr('id');
var nameofinput = nameofdropdown.replace("dropdownreplacement_", "");
// set hidden input value to whats been clicked
$("[name='"+nameofinput+"']").val($(this).parent().find("span").text());
// set div
$("div#"+nameofdropdown+" > span").text($(this).text());
$("div#"+nameofdropdown+" ul").hide();
return false;
});
});
// Remove drop down then add in replacement html
$(that).delay(1000).after(hiddeninput);
$(that).delay(1100).after(dropdowndiv);
$(that).delay(1200).remove();
}
Thnaks
Скотт
Спасибо! Я не знаю, почему я об этом не думал. У меня были подобные проблемы, подобные этому раньше, и мне удалось их обработать, но на этот раз я убедился, что не было лучшего способа, чем я это сделал ... – Brady