jQuery .val()不使用jQueryUI自动完成

时间:2013-07-17 19:01:07

标签: jquery jquery-ui autocomplete jquery-autocomplete jquery-ui-autocomplete

我在一个表单上有两个jQueryUI Autocomplete。一个以另一个为食。我的目标是让第一个字段自动完成并将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()不起作用有任何想法?

1 个答案:

答案 0 :(得分: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自动填充功能时选择它不会起作用。提供函数作为源使您可以在每次发出请求时重新查询公司Id的DOM。