JQuery. Каждая функция - PullRequest
0 голосов
/ 12 марта 2009

У меня есть куча изображений на моей странице ASP.NET, например:

for (int i = 0; i < 3; i++)
{
    Image image = new Image();
    image.ID = "UpdateStatus";
    image.CssClass = "imageCss";
    image.ImageUrl = "Bump.GIF";
    this.Controls.Add(image);
}

Я хочу просмотреть каждое изображение.

Почему это не работает? то есть "Функция 1" выводится, но "Функция 2" не

$(document.body).click(function () {
    console.log('Function 1');

    $('imageCss').each(function(){
        console.log('Function 2');
    });
});

Почему это не работает? т.е. «Функция 1» выводится, а «Функция 2» выводится ОДИН РАЗ. Почему не 3 раза?

$(document.body).click(function () {
    console.log('Function 1');

    $(''#UpdateStatus'').each(function(){
        console.log('Function 2');
    });
});

Это работает нормально, НО я не могу получить доступ к 'this', это NULL. Мне нужно иметь возможность ссылаться на текущее изображение.

$(document.body).click(function () {
    console.log('Function 1');

    $.each('#UpdateStatus', function() { //Or when I use 'imageCss'
        console.log('Function 2');        
        console.log(this);
    });
});

Ответы [ 2 ]

10 голосов
/ 12 марта 2009

(1) Ваш вызов jQuery $('imageCss') не является допустимым селектором. Вам необходимо поставить префикс имени класса на «.» для обозначения того, что вы хотите выделить элементы с классом «imageCss»:

$('.imageCss')

(2) идентификаторы должны быть уникальными. Когда вы устанавливаете Control.ID = "foo" на сервере в ASP.NET, это устанавливает на стороне сервера ID элемента управления. Идентификатор на стороне клиента, сгенерированный в HTML, будет уникальной длинной уродливой строкой, такой как ctl00_ctl01_pnlMain_foo1. Ваш лучший вариант - использовать селекторы классов. Вы можете применить несколько классов к одному элементу, используя пробел для их разделения:

myImage.CssClass = "image otherclass";

И $('.image'), и $('.otherclass') правильно выберут элемент.

(3) this не существует из-за замыканий . Функции выполняются в контексте объекта, который вызывает функцию, поэтому this будет этим объектом.

Или, в вашем случае, на самом деле не похоже, что ваша функция выполняется в контексте какого-либо объекта, поэтому я не уверен, что вы ожидаете от this.

0 голосов
/ 12 марта 2009

для ссылки на текущее изображение сделайте что-то вроде:

$.each('#UpdateStatus', function(i, val) {
    console.log('Function 2');        
    console.log(val);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...