У меня есть таблица с множеством полей автозаполнения, которые выглядят так...
<richui:autoComplete style="width:500px" name="objSelect[${newRow-1}].id" value= "" action="${createLinkTo('dir': 'object/searchAJAX')}" forceSelection = "true" maxResultsDisplayed="20" minQueryLength ="3" onItemSelect="updateHiddenInput(id,${newRow-1})" />
У меня есть вызов функции с именем updateHiddenInput
, когда пользователь выбирает значение, передаваемое в выбранном идентификаторе, а также строку, в которой находится автозаполнение (эта функция затем обновляет скрытое поле в той же строке, используя переданные значения, с удостоверением личности). Функция выглядит так: -
function updateHiddenInput(id, num){
var objID = "objectID[" + num + "].id";
$(document.getElementById(objID)).val(id);
}
Все работает, пока я не добавлю новую строку в свою таблицу, это сдвинет все вниз на одну строку и не позволит автозаполнению обновить скрытое поле правильных строк (поскольку оно все еще ссылается на старую строку).
В настоящее время у меня есть еще один фрагмент кода, который проходит и переименовывает все поля при вставке новой строки, но я понятия не имею, как обновить автозаполнение, чтобы оно проходило через правильный номер строки, кто-нибудь знает, как я могу это изменить?
Единственная другая альтернатива, о которой я мог бы подумать, - это просто пройти через сам объект, а также идентификатор, который я затем могу найти скрытым на основе объекта, но я не могу понять, как это сделать, любые предложения с благодарностью получены! :С
Я пытался изменить onItemSelect="updateHiddenInput(id,${newRow-1})"
на onItemSelect="updateHiddenInput(id,this)"
Теоретически я могу просто пройти через объект автозаполнения и оттуда просто пройти по странице, чтобы найти скрытое поле, которое я хочу обновить. Однако, когда я затем пытаюсь использовать этот объект в своей функции, например, с чем-то вроде: -
var mynumber = $(myobject).closest('td').find('input').val();
Я всегда получаю "неопределенное" значение, когда пытаюсь вернуть значение...
Если я просто вставлю alert(myobject)
в функцию, она вернет AutoComplete instance0 autoLook[0].id
, но если я вставил новые строки, значение id не изменится (т. е. id объекта теперь autoLook[3].id, но он по-прежнему показывает [0], который Я думаю, что это может быть частью проблемы, но теперь у меня есть идея, как я могу обновить это значение...
Я замечаю, что при просмотре firebug в html есть /script, связанный с автозаполнением, что может быть проблемой, поскольку оно не обновляется при добавлении новых строк, и я вижу несколько ссылок на старое/исходное значение идентификатора (см. ниже), так что, возможно, прохождение через this
не передает текущие значения объектов через...?
<script type="text/javascript">
var autoCompleteDataSource = new YAHOO.util.XHRDataSource("/Framework/object/searchAJAX");
autoCompleteDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
autoCompleteDataSource.responseSchema = {
resultNode : "result",
fields : [
{ key: "name" },
{ key: "id" }
]
};
;
autoComplete = new YAHOO.widget.AutoComplete('autoLook[0].id','ad186a42e45d14d5cde8281514f877e42', autoCompleteDataSource);
autoComplete.queryDelay = 0;
autoComplete.prehighlightClassName = 'yui-ac-prehighlight';
autoComplete.useShadow = false;
autoComplete.minQueryLength = 3;
autoComplete.typeAhead = false;
autoComplete.forceSelection = true;
autoComplete.maxResultsDisplayed = 20;
autoComplete.shadow = false;
var itemSelectHandler = function(sType, args) {
var autoCompleteInstance = args[0];
var selectedItem = args[1];
var data = args[2];
var id = data[1];
updateHiddenInput(id,this) };
autoComplete.itemSelectEvent.subscribe(itemSelectHandler);
</script>
Моя благодарность пользователю 1690588 за всю его помощь! :)
При дальнейшем копании я убедился, что мои проблемы сводятся к строке autoComplete = new YAHOO.widget.AutoComplete('autoLook[0].id','a5b57b386a2d1c283068b796834050186', autoCompleteDataSource);
, а именно к той части, где она вводит autoLook[].id
, и если бы я мог изменить это, все было бы в порядке, но эта строка генерируется автоматически, и я понятия не имею, как обновить его, у кого-нибудь есть подобный опыт?
someId${idx}
и начать обновление неправильное поле. Я надеялся каким-то образом передать объект автозаполнения в функцию, чтобы затем я мог динамически определить, где он находился на странице, и найти связанное с ним скрытое поле, но передача объекта не работает: S 20.11.2013jQuery(tg._elTextbox).closest("tr.dummyClass").find("input[type=hidden]").val(id);
). 21.11.2013