2

我在一个表单上有两个 jQueryUI 自动完成功能。一个以另一个为食。我的目标是让第一个字段自动完成并将 ID 填充到(打算成为)隐藏字段。第二个自动完成对远程页面进行 Ajax 调用,将第一个自动完成的 ID 传递给它。

这主要是工作。第一个自动完成工作正常,它用适当的值填充 companyID 字段。

我的问题是第二个自动完成总是将值 0 传递给 Ajax 请求的页面。就好像在第二个自动完成中调用源返回的 .val() 没有正确读取 companyID 字段的值。

更让人抓狂的是,当社区字段发生变化时,我会调用 alert(),它会报告正确、准确的 companyID! 啊!

我的 jQuery:

<script>
    $(document).ready(function() {
        var Companies = [
            { label: 'America First Properties', value: '6' },
            { label: 'Western National Group', value: '7' },
            { label: 'Greystar Property Management', value: '8' },
        ]

        $('#Company').autocomplete({
            autoFocus:  true,
            delay:      0,
            minLength:  2,
            source:     Companies,
            select:     function(event,ui) {
                            $('#companyID').val(ui.item.value);
                            $('#Company').val(ui.item.label);
                            $('#Community').val('');
                            return false;
                        },
            change:     function(event,ui) {
                        }
        });

        $('#Community').autocomplete({
            autoFocus:  true,
            delay:      200,
            minLength:  2,
            select:     function(event,ui) {
                            $('#communityID').val(ui.item.value);
                            $('#Community').val(ui.item.label);
                            return false;
                        },
            change:     function(event,ui) {
                            alert("The value of the company ID field is: " + $('#companyID').val());
                        },
            source:     '/Community/ajax_getCommunities.cfm?companyID=' + $('#companyID').val()
        });
    });
</script>

还有我的 HTML:

<form name="addCommunityform" id="addCommunityform" action="act_addCommunity.cfm" method="post">    
    <fieldset>
        <label>Intended to be Hidden Fields:</label>
        <label>companyID:</label>
        <input type="text" name="companyID" id="companyID" value="0">
        <label>communityID:</label>
        <input type="text" name="communityID" id="communityID" value="0">
    </fieldset>

    <fieldset>
        <label for="Company">Property Management Company:</label>
        <input type="text" name="Company" id="Company" value="">
    </fieldset>

    <fieldset>
        <label for="Community">Community Name:</label>
        <input type="text" name="Community" id="Community" value="">
    </fieldset>
</form>

任何人都知道为什么这个 .val() 不起作用?

4

1 回答 1

4

您需要使用函数而不是字符串作为自动完成的源:

$('#Community').autocomplete({
    autoFocus: true,
    delay: 200,
    minLength: 2,
    select: function(event,ui) {
        $('#communityID').val(ui.item.value);
        $('#Community').val(ui.item.label);
        return false;
    },
    change: function(event,ui) {
        alert("The value of the company ID field is: " + $('#companyID').val());
    },
    source: function (request, response) {
        $.ajax({
            url: '/Community/ajax_getCommunities.cfm?companyID=' + $('#companyID').val(),
            data: request,
            success: response,
            error: function () {
                response([]);
            },
            dataType: 'json'
        });
    }
});

由于#companyId' 的值正在更改,因此在初始化自动完成时选择一次#Community将不起作用。提供一个函数作为源使您可以在每次发出请求时重新查询 DOM 以获取公司 ID。

于 2013-07-17T20:05:18.837 回答