У меня возникла проблема с установкой значения текстового поля, а затем с его помощью снова с jquery.
У меня есть 2 поля ввода, которые я использую с автозаполнением jQuery:
<input type="text" name="AccountName" id="AccountName" size="50">
<input type="text" id="NewAccountId" name="NewAccountId" value="0">
Когда я вызываю автозаполнение для этого поля, он вводит идентификатор учетной записи в поле NewAccountId. Я знаю, что работает; вы можете увидеть его на экране. Код:
$(function()
{$("#AccountName").autocomplete({
source: "../cfc/ajax_code.cfc?method=AccountSearchId",
minLength: 2,
select: function(event, ui) {
$('#NewAccountId').val(ui.item.custid);
ContactListUpdate(this.MyCustId);} }); });
Когда я перехожу к следующему полю, у меня есть другой вызов базы данных через автозаполнение.
<input type="text" name="TransactionName" id="TransactionName" size="20">
Функция jquery:
$(function()
{$("#TransactionName").autocomplete({
source: "../cfc/ajax_code.cfc?method=TransactionLookUp&MyCustomerId="+$("#NewAccountId").val(),
minLength: 2,
select: function(event, ui) {
$('#MyTransactionId').val(ui.item.transid);} }); });
Итак, вот моя проблема...
Когда я получаю свое имя учетной записи, он фактически устанавливает мой идентификатор в поле NewAccountId. Однако, когда я запускаю автоматическую транзакцию, она получает исходное значение нагрузки из поля NewAccountId (обычно это "0"), а не значение из первой функции. Я знаю, что код работает, потому что в FireFox, если я обновляю форму со значением в поле NewAccountId, код будет использовать это значение для фильтрации моего идентификатора транзакции.
После очистки страниц справки в течение 2 дней, ближайший ответ, который я нашел, состоял в том, что значение булевского грязного флага не менялось, но не нашло, как переопределить это. Я попробовал обновить поле со следующими параметрами, безрезультатно:
this.MyCustId = $("#NewAccountId").val();
document.getElementById('NewAccountId').setAttribute('value',this.MyCustId);
или
this.MyCustId = $("#NewAccountId").val();
document.getElementById('MyTestId').value = this.MyCustId;
Обе эти опции устанавливают значение поля, но не изменяют исходное значение поля.
И чтобы добавить оскорбление к травме, как вы можете видеть в первой автоматической функции, я вызываю функцию ContactListUpdate javascript - not jquery. Это вызывает обновление, которое изменяет контакт в списке выбора. Он использует новый идентификатор учетной записи. Оно работает!
Кроме того, после того, как я отправлю форму, значение в поле данных будет именно тем, чем я хочу. Он работает только, когда я вызываю скрипт для получения транзакции.
ПОМОГИТЕ! Есть предположения?
Благодарю.
Код для ввода автозаполнения в поле TransactionName выполняется на странице. В это время значение поля NewAccountId всегда равно 0
, поэтому строка, которую вы предоставляете для опции "source", всегда включает 0
.
Вам необходимо предоставить функцию обратного вызова для опции "источник", которая будет вызываться при выполнении автозаполнения.
Пытаться:
$("#TransactionName").autocomplete({
source : function(request, response) {
$.get("../cfc/ajax_code.cfc", {
term: request.term,
method: "TransactionLookUp",
MyCustomerId: $("#NewAccountId").val()
}, function(data) { response(data); });
},
minLength: 2,
select: function(event, ui) {
$('#MyTransactionId').val(ui.item.transid);
}
});
Установите второй автозаполнения в обратном вызове первого. Попробуй это:
$(function () {
function setAutoComplete() {
$("#TransactionName").unbind();
$("#TransactionName").autocomplete({
source: "../cfc/ajax_code.cfc?method=TransactionLookUp&MyCustomerId=" + $("#NewAccountId").val(),
minLength: 2,
select: function (event, ui) {
$('#MyTransactionId').val(ui.item.transid);
}
});
}
$("#AccountName").autocomplete({
source: "../cfc/ajax_code.cfc?method=AccountSearchId",
minLength: 2,
select: function (event, ui) {
$('#NewAccountId').val(ui.item.custid);
ContactListUpdate(this.MyCustId);
setAutoComplete();
}
});
});
$.get()
.