jQuery不会设置并获得相同的值

时间:2014-02-20 22:58:30

标签: jquery input autocomplete

我在设置文本字段值时遇到问题,然后再次使用jquery。

我有两个输入字段,我正在使用jQuery自动完成:

<input type="text" name="AccountName" id="AccountName" size="50">
<input type="text" id="NewAccountId" name="NewAccountId" value="0">

当我为此字段调用自动填充时,它会将帐户ID输入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字段中设置了我的ID。但是,当我运行事务自动完成时,它从NewAccountId字段(通常是&#34; 0&#34;)获取原始加载值,而不是第一个函数的值。我知道代码有效,因为在FireFox中如果我使用NewAccountId字段中的值刷新表单,代码将使用该值来过滤我的事务ID。

在搜索帮助网站2天后,我发现最接近的答案是布尔脏标志值没有变化,但还没有找到如何覆盖它。我尝试使用以下选项更新字段,但无济于事:

this.MyCustId = $("#NewAccountId").val();
document.getElementById('NewAccountId').setAttribute('value',this.MyCustId);

this.MyCustId = $("#NewAccountId").val();
document.getElementById('MyTestId').value = this.MyCustId;

这两个选项都设置字段值,但不会更改原始字段值。

并且要添加侮辱伤害,正如您在第一个自动完成功能中看到的那样,我调用ContactListUpdate javascript - 而不是jquery - 函数。这会调用更新,以更改选择列表中的联系人。它使用新的帐户ID。有用!

此外,在我提交表单后,数据字段中的值正是我想要的。当我调用脚本来获取事务时它才起作用。

HELP!有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分: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();
        }
    });
});

答案 1 :(得分:0)

在TransactionName字段上检测自动完成的代码在页面就绪时执行。那时NewAccountId字段的值始终为0,因此您为“source”选项提供的字符串始终包含0

您需要为“source”选项提供回调函数,该函数将在执行自动完成时调用。

尝试:

$("#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);
    }
});