Как я могу сохранить объект jQuery в моем массиве для последующего использования? - PullRequest
3 голосов
/ 01 августа 2011

У меня есть несколько значков, которые пользователь выбирает своей мышью.

У меня есть эта серия значков, где я могу выбрать и установить их границу.Я ограничиваю количество выбранных значков до 5. Первый выбранный станет желтой рамкой.Следующие 4 будут черной рамкой.

На document.ready я делаю:

$ ('img.selectable'). Click (function () {image_click (this);});

Для CSS:

.selectable {
    border: 3px solid #ebe6b3;
    float:left;
    margin:1px;
}

Для HTML:

<img class="selectable" src="img/first_icon.png">

У меня есть эта функция:

function image_click(e)
{
    if($(e).data("clicked")=="yes")
    {
        images_selected--;
        $(e).data("clicked","no").css('border','3px solid ' + NEUTRAL_COLOR);
        if(images_selected==1)
        {
          $('img.selectable').not( e ).filter(function() {
                    return $( this ).data("clicked")=="yes";
                     }).css('border','3px solid ' + YELLOW_COLOR);

        }
    }
    else
    {
        if (images_selected<5)
        {
            images_selected++;
            if(images_selected==1)
            {
                $(e).data("clicked","yes").css('border','3px solid ' YELLOW_COLOR);
            }
            else
            {
                $(e).data("clicked","yes").css('border','3px solid ' + BLACK_COLOR);
            }
        }
    }
};

Должен быть первая иконка , которая будет постоянно желтой.Я думал о том, чтобы сделать это с массивом порядка, который хранит порядок объектов.Дело в том, что я не смог вызвать объект из массива и все еще сохранить его функцию CSS.

Я думал о чем-то вроде:

var x=[];

в image_click(e){..

в какой-то момент я сохраняю объект:

    $(e).data("order",clicked_img);

    x[clicked_img]=e;

, а когда вынимаю его:

    alert(x[clicked_img].data("order"));
...}

НО .... Кажется, у меня нетдоступ к данным больше.Например, когда объект покинул область jQuery, он потерял свои гражданские права.Я не знаю, как получить доступ к переменным данных.

Помогите, пожалуйста!Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Вы сохранили элемент DOM, а не объект jQuery.Это должно быть

x[clicked_img]=$(e);

, а не

x[clicked_img]=e;
2 голосов
/ 01 августа 2011

Например, когда объект покинул область jQuery, он утратил свои гражданские права.

Простое решение: поместите его обратно в область jQuery.У вас есть пара вариантов:

x[clicked_img] = $(e);
// ...
alert(x[clicked_img].data("order"));

или:

x[clicked_img] = e;
// ...
alert($(x[clicked_img]).data("order"));

или:

x[clicked_img] = e; // assuming e is the DOM element, not the event
// ...
alert(x[clicked_img].dataset.order);

Последнее пока не рекомендуется, так как я не уверен вкросс-браузерные последствия, но в любом случае именно так вы делаете это в «обычном» JavaScript.

Я бы предложил первый метод, и в этом случае вам также следует присвоить $(e) переменнойв начале image_click, поэтому он не перестраивает объект jQuery каждый раз.

...