Jquery自动完成UI - 多个字段没有结果

时间:2012-05-30 14:36:39

标签: jquery jquery-ui

Andrew's answer to my comment引发了这个问题。

根据上面链接中的精彩答案,问题底部的代码仅适用于一个小部件。但这是一个很好的代码并且很有意义......我想我想要两全其美。不错的JS,(如果可能的话)并且将结果show()仅为我们当时使用的元素。

这个代码片段是我的问题的主要症结,正如我所看到的那样:

        source: function (request, response) {
        jQuery.ajax({
            url: "/autocomplete.json",
            data: {
            term: request.term
            },
            success: function (data) {
            if (data.length == 0) {
        jQuery('span.guest_investor_email').show();
                jQuery('span.investor_field_delete_button').show();
            }
            response(data);
            }
        });

目前:

我的页面上有一个“添加更多信息”的按钮,每次点击它时,都会显示自动填充文本字段的新实例,其中包含一些隐藏字段和display:none; {{1} }}。 如果我使用自动完成文本字段,说3次,我在页面上有3个自动完成实例,第三个找到0结果:代码将显示()guest_investor_email文本字段的所有3个实例,而不是只有guest_investor_email一个空白。

问题:

我如何获得类似的东西 工作this

jQuery(this).siblings(('span.guest_investor_email').show();是一个Object,而不是要选择的元素数组。如果它不在this,我不介意,只要我知道如何实现它。感谢。


完整代码:

     jQuery(".auto_search_complete").live("click", function() {
     jQuery(this).autocomplete({
        minLength: 3,

        source: function (request, response) {
        jQuery.ajax({
            url: "/autocomplete.json",
            data: {
            term: request.term
            },
            success: function (data) {
            if (data.length == 0) {
        jQuery('span.guest_investor_email').show();
                jQuery('span.investor_field_delete_button').show();
            }
            response(data);
            }
        });
        },

        focus: function(event, ui) {
        jQuery(this).val(ui.item.user ? ui.item.user.name : ui.item.pitch.name);
        return false;
        },
        select: function(event, ui) {
        jQuery(this).val(ui.item.user ? ui.item.user.name : ui.item.pitch.name);
        jQuery(this).siblings('div.hidden_fields').children('.poly_id').val(ui.item.user ? ui.item.user.id : ui.item.pitch.id);
        jQuery(this).siblings('div.hidden_fields').children('.poly_type').val(ui.item.user ? "User" : "Pitch");
        jQuery(this).siblings('span.guest_investor_email').hide();
                jQuery(this).siblings('span.investor_field_delete_button').show();
                jQuery(this).attr('readonly','readonly');
                jQuery(this).attr('id', "investor-selected");

        return false;
        }
    }).each(function() {
        jQuery(this).data( "autocomplete" )._renderItem = function( ul, item ) {
        return jQuery( "
  • " ) .data( "item.autocomplete", item ) .append("

    " + (item.user ? item.user.name : item.pitch.name) + "
    " + (item.user ? item.user.investor_type : item.pitch.investor_type) + " - " + (item.user ? item.user.city : item.pitch.city) + "

    " ) .appendTo( ul ); }; }); });

    1 个答案:

    答案 0 :(得分:1)

    我没有完全理解你想要实现的目标,但我认为你想要将.live事件绑定到的元素是正确的吗?

    jQuery(".auto_search_complete").live("click", function() {
        var $this = $(this);
        jQuery(this).autocomplete({
            minLength: 3,
            ...
            success: function (data) {
            if (data.length == 0) {
        jQuery('span.guest_investor_email').show();
                $this.siblings('span.investor_field_delete_button').show();
            }
        ...