проблема в использовании $ .each? - PullRequest
1 голос
/ 03 сентября 2011

Значения строки базы данных units для значений салам & салават : [эти значения вставлены json_encode()]

салам:

[{"name_units": "salam", "price_units": "74,554", "checkbox_units": ["мини-бар", "дворянин"]}, {"name_units": "mokhles", "price_units":"4,851,269", "checkbox_units": [ "mobleman", "TV"]}, { "name_units": "fadat", "price_units": "85,642", "checkbox_units": [ "Мини-бар", "mobleman",»tv "]}]

салават:

[{" name_units ":" chaker "," price_units ":" 5,452 "," checkbox_units ": null},{"name_units": "khobe", "price_units": "5,452,545", "checkbox_units": ["мини-бар", "mobleman"]}]

В этом примере выполните следующие работы:

ПРИМЕР: DEMO1 - здесь работает мой код & DEMO2-здесь только для показа всех кодов

Первый .Пожалуйста, введите значение: Сала во входных данных => это имеет "буксировочный" результат, пожалуйста, нажмите на каждый из результатов: Салам или Салават -> Вы видите, чтополучить пять выходных данных после нажатия => Салам & Мохлес & Фадат | chaker & khobe (В случае, если должно быть три значения, так как мы нажали на слово salam => salam & mokhles & fadat )

секунда .пожалуйста, вставьте значение: salam => это имеет один результат, пожалуйста, нажмите на результат ( salam ) -> вы видите, что получите "три" вывод после нажатия => salam & mokhles & fadat

Я хочу в любом случае, что это результат поиска "пять" или "три" значения или "И т.д.", получить значения name_units связано со словом, которое является щелчком.

$('.auto_complete').keyup(function () {
    var dataObj = $(this).closest('form').serialize();
    $.ajax({
        type: "POST",
        dataType: 'json',
        //url: 'http://binboy.gigfa.com/admin/tour_foreign/auto_complete',
        url: 'auto_complete',
        data: dataObj,
        cache: false,
        success: function (data) {
            var id_name = $('.list_autobox_hotel').attr('id');
            $('.list_autobox_hotel').show().html('');
            if (data == 0) {
                $('.list_autobox_hotel').show().html('<p><b>there is no</b></p>');
            } else {
                $.each(data, function (index, value) {
                    $('<p id="' + value.name + '">' + value.name + '</p>').appendTo('.list_autobox_hotel');
                });
                //////////////////////*HERE//////////////////////
                $('.list_autobox_hotel p').click(function (e) {
                    e.preventDefault();
                    var ac = $(this).attr('id');
                    $.each(data, function (index, value) {
                        $.each(value.units, function (bu, key) {
                            alert(key.name_units);
                        });
                    });
                    $(this).remove();
                    return false;
                });
                //////////////////////HERE*//////////////////////

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

ОБНОВЛЕНИЕ:

для корзины, я сделал это как: (но это не работает, и до сих порта же проблема)

$('.list_autobox_hotel p').bind("click", function (e) {
    e.preventDefault();
    var ac = $(this).attr('id');
    $.each(data, function (index, value) {
        $.each(value.units, function (bu, key) {
            alert(key.name_units);                
        });
    });
    $(this).remove();
    return false;
});

я не понимаю "filter the data depending on what item you click on" и не знаю как это!?

ОБНОВЛЕНИЕ 2

Неужели это правда??(но это не работает, и есть предупреждение: undefined)

$('.list_autobox_hotel p').bind("click", function (e) {
    e.preventDefault();
    var ac = $(this).attr('id');
    var ok = $.grep(data, function (e) {
        return e.name == ac;
    }).units;
    alert(ok);
    $(this).remove();
    return false;
});

1 Ответ

2 голосов
/ 03 сентября 2011

Это потому, что ваш код не заботится о том, на каком элементе вы щелкаете, он всегда показывает все данные.

Вы должны либо связать событие click внутри цикла, где вы добавляете элементы, так чтоВы можете использовать конкретные данные для каждого элемента или фильтровать данные в зависимости от того, на каком элементе вы щелкнули.

...