【问题标题】:jQuery won't set and get the same valuejQuery 不会设置和获取相同的值
【发布时间】:2014-02-20 22:58:30
【问题描述】:

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

我有 2 个用于 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 字段(通常为“0”)而不是第一个函数中获取原始加载值。我知道代码有效,因为在 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。有用!

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

帮助!有什么想法吗?

谢谢。

【问题讨论】:

    标签: jquery input autocomplete


    【解决方案1】:

    在第一个的回调中设置第二个自动完成。试试这个:

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

    【讨论】:

    • 有趣,它只工作了一半。因此,当我选择我的客户然后尝试选择交易时,它起作用了。但是,然后我更改了客户,交易选择/自动完成甚至根本不起作用,更不用说获得正确的交易了。所以现在我已经成功了一半!
    【解决方案2】:

    检测 TransactionName 字段自动完成的代码在页面准备就绪时执行。当时 NewAccountId 字段的值始终为0,因此您为“源”选项提供的字符串始终包含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);
        }
    });
    

    【讨论】:

    • 我明白你的意思。然而,这以相同的结果结束。虽然页面可能会在 NewAccountId 等于“0”的情况下加载,但第一个函数会更改显示值,但不会更改基础值。这与我实施的完全一样。感谢您的建议。
    • @user3144834 - 正如我的回答所述,您的原始代码肯定有问题,而我的回答中的代码解决了这个问题。如果它仍然不适合您,那么您必须调试其他错误。首先在调用 $.get() 之前检查输入的值。
    • 实际上,约翰,这行不通。我回去重新测试。自动完成将“term”的 URL 参数添加到 Web 调用。你的代码删除了 term 参数,我需要把它放回去。现在的问题是,怎么做?从好的方面来说,它似乎确实从 NewAccountId 中获取了正确的 ID——这首先是我的问题。
    • 所以我将 GET 源更改为:"../cfc/ajax_code.cfc?method=TransactionLookUp&term="+$("#TransactionName").val()," 这处理了“term”参数。使用FF调试器可以看到调用参数,也可以看到返回的结果。现在结果不会列出来了。这个选项越来越接近工作了。
    • @user3144834 - 我从自动完成文档中看到,当“source”是字符串时会自动包含“term”参数,但当它是回调函数时则不会。我更新了答案中的$.get() 调用以包含“term”参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多