Из autocomplete изменить SELECT
Добрый день. Не ругайте - слабо шарю.
Есть SELECT и autocomplete - у них позиции совпадают, надо выбрать в автокомплите - взять номер (не значение в номер в списке) и присвоить SELECT этот номер, для того чтобы SELECT выбрал нужную у себя позицию. Делаю так
<select name="intGlnID" id="id_n" style="font-size: 9px;" onchange="document.getElementById('ChooseGLNForm').submit()">
...........
</select>
<input type="text" name="varGlnText" id="varGlnText" value="{$search.varGlnText|escape}"/>
<script type="text/javascript">
var data = $("#autocompleteDiv").text().split("; ");
$("#varGlnText").autocomplete(data, {matchContains: 1});
$("#varGlnText").autocomplete({select:function(event,ui)
{
document.getElementById('id_n').options[ui.value].selected=true;
document.getElementById('ChooseGLNForm').submit()}});
</script>
собственно в чем проблема - как получить номер позиции в автокомплите (после выбора) - как я понял это одно из свойств ui (вот только какое - темный лес) и присвоить select с этим номером значение TRUE - т.е. выбрать. явно вот тут : document.getElementById('id_n').options[ui.value].selected=true; неправильно - а как я не знаю:help: |
Цитата:
|
автокомплит:
<div id="autocompleteDiv" style="display: none;"> Иванов; Петров; Сидоров; </div> SELECT: <select name="intGlnID" style="font-size: 9px;" onchange="document.getElementById('ChooseGLNForm') .submit()"> <option value="2547">Иванов</option> <option value="7458">Петров</option> <option value="8521">Сидоров</option> </select> Вот и я хочу выбрав в комплите Петрова, который второй в списке автоматом выбрать в селекте Петрова, который тоже стоит вторым. |
kot_k_k,
ok:write: |
autocomplete сменить select
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>autocomplete demo</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
<input type="text" name="varGlnText" id="varGlnText" value=""/>
<select name="intGlnID" name="intGlnID" id="id_n" onchange="document.getElementById('ChooseGLNForm') .submit()">
<option value=2547>Иванов</option>
<option value=7458>Петров</option>
<option value=8521>Сидоров</option>
</select>
<script>
var sel = $("#id_n")[0];
$( "#varGlnText" ).autocomplete({
select: function(event, ui) { sel.value = ui.item.indx } ,
source: function( request, response ) {
response($.map(sel.options, function(item) {
return {
label: item.text,
value: item.text,
indx: item.value
}
}))
},
matchContains: 1
});
</script>
</body>
</html>
|
трудно быть деревянным.
попробовал как предложили, не работает автокомплит - нет данных. дело в том автокомплит и селект формируется при загрузке страницы вот "весь" код этого сщазтья:
<div id="autocompleteDiv" style="display: none;">
{foreach from=$availableglns item=gln}
{$gln.varName} ({$gln.varGln});
{/foreach}
</div>
<form action="/" id="ChooseGLNForm" method="POST" style="margin: 0; padding: 0;">
<select name="intGlnID" id="id_n" style="font-size: 9px;" onchange="document.getElementById('ChooseGLNForm').submit()">
{foreach from=$availableglns item=gln}
<option value="{$gln.intGlnID}" {if $currentgln.intGlnID==$gln.intGlnID}selected{/if}>{$gln.varName} ({$gln.varGln})</option>
{/foreach}
</select>
<input type="text" name="varGlnText" id="varGlnText" value="{$search.varGlnText|escape}"/>
{literal}
<script type="text/javascript">
var data = $("#autocompleteDiv").text().split("; ");
$("#varGlnText").autocomplete(data, {matchContains: 1});
$("#varGlnText").autocomplete({select:function(event,ui){
document.getElementById('id_n').options[ui.value].selected=true;
document.getElementById('ChooseGLNForm').submit()}});
</script>
{/literal}
</form>
поэтому и пытаюсь сделать вот это: document.getElementById('id_n').options[ui.value].selected=true; т.е. заменив скирп и убрав <div id="autocompleteDiv" - не работает. почему? может по другому сформировать div чтобы в него внести массив с label, index, value - а как я не знаю это оформить!! Большое спасибо за участие. п.с. тяжело после VBA. |
kot_k_k,
var data = $("#autocompleteDiv").text().split("; ");
$("#varGlnText").autocomplete(data, {matchContains: 1});
$("#varGlnText").autocomplete({select:function(event,ui){
var i = $.inArray(ui.item.value, data);
document.getElementById('id_n').options[i].selected=true;
document.getElementById('ChooseGLNForm').submit()}});
:( |
два вопроса (бо не выходит)
1. может не давать изменить SELECT - вот это в самом селекте <option value="{$gln.intGlnID}" {if $currentgln.intGlnID==$gln.intGlnID}selected{/if}> тут стоит условие на проверку смарти? хотя если выбираем в слекте руками - то работат! 2. чему должно быть равно i (логически)? var i = $.inArray(ui.item.value, data); - на сайте alert - не пашет и проверить ХЗ. спасибо за понимание. |
kot_k_k,
код ранее то работал ?а то может так?
var data = $("#autocompleteDiv").text().split("; ");
$("#varGlnText").autocomplete(data,{matchContains: 1,select:function(event,ui){
var i = $.inArray(ui.item.value, data);
document.getElementById('id_n').options[i].selected=true;
document.getElementById('ChooseGLNForm').submit()}});
|
в том то и дело что нет.
там какой-то умник воткнул выпадающий список - а кол-во записей во время тестовых работ (регулярных) - тысячи. на проде не больше 2-х-3-х. поэтому найти нужную запись просто не реально, а надо. вот сваял автокомплит. может не соответствие тому что получаем в val i=.... и options[i].selected??? а не может быть это из-за того что "срабатывание" - т.е. запуск вот этого document.getElementById('ChooseGLNForm').submit() происходит только после нажатия ENTER в поле в котором работает автокомплит. т.е. когда я нажал мышью на выборке и значение заполнилось в поле input #varGlnText - ничего не происходит, пока не жмакнешь Энтер??? |
| Часовой пояс GMT +3, время: 23:58. |