Просто желая подтвердить, что я превысил практическое ограничение в поле со списком автозаполнения jQuery UI, я получаю следующую ошибку в FF:
Сценарий на этой странице может быть занят или
это могло перестать отвечать. Вы
можете остановить скрипт сейчас, откройте
сценарий в отладчике, или пусть
Продолжение сценария.
Страница представляет собой большую таблицу (более 2000 строк), сгенерированную из php, она собиралась содержать 7 из этих комбинированных блоков (7 столбцов) на строку, однако я едва могу пройти через первый столбец набора. Страница загружается и функционирует, но это занимает несколько минут, и браузер на некоторое время перестает отвечать на запросы.
Возможно, есть ли способ изменить JS, чтобы сделать его более эффективным? Ниже приведен пример JS, я использую php для вставки массива в скрипт (строка 3).
Код:
<script type='text/javascript'>
var input = new Array();
var i = 1;
<?php echo $JSElements; ?> //PHP
$('.TC_1').each(function(index) {
input[i] = $("[name=TC_"+i+"_1]").autocomplete({
source: elementArray,
select: function(){alert("selected");},
minLength: 0
}).addClass("ui-widget ui-widget-content ui-corner-left");
//Get the id for the target field:
var target = $(input[i]).attr('name');
var ID = target.substr(3);
$("<button id='bt_"+ID+"' type='button'> </button>")
.attr("tabIndex", -1)
.attr("title", "Show All Items")
.insertAfter(input[i])
.button({
icons: {
primary: "ui-icon-triangle-1-s"
},
text: false
})
.removeClass("ui-corner-all")
.addClass("ui-corner-right ui-button-icon")
.click(function() {
// close if already visible
if ($("[name=TC_"+ID+"]").autocomplete("widget").is(":visible")) {
$("[name=TC_"+ID+"]").autocomplete( "close" );
return;
}
$(this).blur();
$("[name=TC_"+ID+"]").autocomplete("search", "" );
$("[name=TC_"+ID+"]").focus();
});
i++;
});
</script>
Если нет способа заставить это работать? Кто-нибудь может предложить какие-либо альтернативы? Имейте в виду, что там будет около 8000 полей! Если нет, то моим последним средством является создание простого выпадающего списка ajax.