JQuery Auto Complete не работает на всех полях - PullRequest
1 голос
/ 12 сентября 2011

Я использую codeigniter. А у меня три поля с классом .eghamat. Я не знаю, почему автозаполнение не работает в двух первых полях (INSERT VALUE HERE 1, INSERT VALUE HERE 2), но работает в третьем (INSERT VALUE HERE 3).

Проблема может быть вызвана одним из следующих факторов:

  • Код php
  • петля $.each
  • вызов ajax

Кто-то видит, что не так?

HTML:

<div class="bg_units bu0">
        <div class="auto_box">
                <b class="search_hotel">
                <div class="mediumCell">
                        <input type="text" name="hotel_auto" class="eghamat" placeholder="INSERT VALUE HERE 1">
                </div>
                <ul class="list_autobox_hotel">
                </ul>
                </b>
        </div>
</div>

<div class="bg_units bu1">
        <div class="auto_box">
                <b class="search_hotel">
                <div class="mediumCell">
                        <input type="text" name="hotel_auto" class="eghamat" placeholder="INSERT VALUE HERE 2">
                </div>
                <ul class="list_autobox_hotel">
                </ul>
                </b>
        </div>
</div>

<div class="bg_units bu2">
        <div class="auto_box">
                <b class="search_hotel">
                <div class="mediumCell">
                        <input type="text" name="hotel_auto" class="eghamat" placeholder="INSERT VALUE HERE 3">
                </div>
                <ul class="list_autobox_hotel">
                </ul>
                </b>
        </div>
</div>

PHP:

function auto_complete() {
    $hotel_search = $this ->input-> post('hotel_auto');

    $query = $this->db->query("SELECT * FROM hotel_submits WHERE name LIKE '%$hotel_search%' ORDER BY name asc");
    if($query->num_rows()==0){
        return '0';
    }else{
        $data = array();
        foreach ($query->result() as $row)
        {
           $units = json_decode($row->units);
           $data[] = array('name' => $row->name, 'units' =>$units );
        }
    }

    echo json_encode($data);        
}

JQuery:

$('.auto_complete_eghamat').live('keyup',function () {
    var $this = $(this),
    $div = $this.closest('div.bg_units'),
    bu_num =  '.' + $div.attr('class').split(" ")[1];
    var dataObj = $(this).closest('form').serialize();
    $.ajax({
        type: "POST",
        dataType: 'json',
        url: 'auto_complete',
        data: dataObj,
        cache: false,
        success: function (data) {
            //alert(dataObj);
            var id_name = $(bu_num+' .list_autobox_hotel').attr('id');
            $(bu_num+' .list_autobox_hotel').show().html('');
            if (data == 0) {
                $(bu_num+' .search_hotel').show().html('<p><b>there is no</b></p>');
            } else {
                $.each(data, function (index, value) {
                    $('<p id="' + value.name + '">' + value.name + '</p>').appendTo(bu_num+' .list_autobox_hotel');
                });
                $('body').click(function () {
                    $(".list_autobox_hotel p").hide().remove();
                    $('.auto_complete').val('');
                    $('.list_autobox_hotel').show().html('');
                    $('.list_autobox_hotel').css('display', 'none');
                });
            }
        },
        "error": function (x, y, z) {
            // callback to run if an error occurs
            alert("An error has occured:\n" + x + "\n" + y + "\n" + z);
        }
    });
});

Ответы [ 3 ]

0 голосов
/ 13 сентября 2011

не могли бы вы попробовать. и дайте мне знать. ваш admin.js должен быть таким

$(document).ready(function () {
        $('.list_autobox_hotel p').click(function() {               
            $(this).parent().parent().find('.eghamat').val($(this).text());             
            }); 

        $(document).click(function() {
            if($('.list_autobox_hotel').is(':visible')){
                $('.list_autobox_hotel').hide(); 
            }
            return true;

            });


        ////////////////////////////////////////////////////////////////
        $('#loadingDiv').hide() // hide it initially
        .ajaxStart(function () {
            $(this).show();
        }).ajaxStop(function () {
            $(this).hide();
        });

        ///////auto_complete///////////////////////////////////////////////
        $('.eghamat').live('keyup', function () {
            var $this = $(this),
                $div = $this.closest('div.bg_units'),
                bu_num = '.' + $div.attr('class').split(" ")[1];
            var dataObj = $(this).closest('form').serialize();
            //alert(dataObj);
            $.ajax({
                type: "POST",
                dataType: 'json',
                //url: 'binboy.gigfa.com/admin/…',
                url: 'auto_complete',
                data: dataObj,
                cache: false,
                success: function (data) {
                    //alert(bu_num);
                    var id_name = $(bu_num + ' .list_autobox_hotel').attr('id');
                    $(bu_num + ' .list_autobox_hotel').show().html('');
                    if (data == 0) {
                        $(bu_num + ' .list_autobox_hotel').show().html('<p><b>there is no</b></p>');
                    } else {
                        $.each(data, function (index, value) {
                            $('<p >' + value.name + '</p>').appendTo(bu_num + ' .list_autobox_hotel');
                        });

                    }
                },
                "error": function (x, y, z) {
                    // callback to run if an error occurs
                    alert("An error has occured:\n" + x + "\n" + y + "\n" + z);
                }
            });
        });

    });
0 голосов
/ 12 апреля 2012

Вот простой код

$('.eghamat').click(function(){
    var id  =$(this).attr('id');
    //Here you have the id select with it and put your code in it
});
0 голосов
/ 12 сентября 2011

не могли бы вы переименовать id="tour" и id="hotel" cz html не может иметь одинаковые идентификаторы несколько раз

id="tour", а также

id="hotel" 

появляется 3 раза в коде, поэтому, пожалуйста,посмотрите на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...