JQuery не будет устанавливать и получить то же значение

0

У меня возникла проблема с установкой значения текстового поля, а затем с его помощью снова с 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. Это вызывает обновление, которое изменяет контакт в списке выбора. Он использует новый идентификатор учетной записи. Оно работает!

Кроме того, после того, как я отправлю форму, значение в поле данных будет именно тем, чем я хочу. Он работает только, когда я вызываю скрипт для получения транзакции.

ПОМОГИТЕ! Есть предположения?

Благодарю.

Теги:
input
autocomplete

2 ответа

0

Код для ввода автозаполнения в поле 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);
    }
});
  • 0
    Я понимаю, что вы говорите. Однако это закончилось теми же результатами. Хотя страница может загружаться с NewAccountId, равным «0», первая функция изменяет отображаемое значение, но не базовое значение. Это сработало именно так, как я реализовал. Спасибо за предложение.
  • 0
    @ user3144834 - Как говорится в моем ответе, у вас определенно была проблема в исходном коде, и код в моем ответе устраняет ее. Если это все еще не работает для вас, должно быть что-то не так, что вам нужно отладить. Начните с проверки значения ввода непосредственно перед вызовом $.get() .
Показать ещё 7 комментариев
0

Установите второй автозаполнения в обратном вызове первого. Попробуй это:

$(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();
        }
    });
});
  • 0
    Интересно, это только половина работы. Поэтому, когда я выбрал своего клиента, а затем попытался выбрать транзакцию, она работает. Однако затем я сменил клиента, и выбор / автозаполнение транзакции вообще не сработало, не говоря уже о получении правильной транзакции. Так что теперь я на полпути!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню