Получение идентификатора изображения по клику и установка его в качестве переменной - PullRequest
1 голос
/ 07 января 2012

У меня есть несколько изображений в списке:

    <div id="accordion">

                <h3><a href="#">Screen Category:</a></h3>

            <div>
                <ul class="filters">
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryAdvertising" /></li>
                    <li><img src="img/icons/filters/new/info.png" title="" alt="" id="categoryInformation" /></li>
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryACA" /></li>
                    <li><img src="img/icons/filters/new/entertainment.png" title="" alt="" id="categoryEntertainment" /></li>
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryInfluencing" /></li>
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryICE" /></li>
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryCommunication" /></li>
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" id="categoryParticipation" /></li>
                </ul>
            </div>

                <h3><a href="#">Screen Type:</a></h3>

            <div>
                <ul class="filters">
                    <li><img src="img/icons/filters/new/communicate.png" title="" alt="" /></li>
                    <li><img src="img/icons/filters/new/info.png" title="" alt="" /></li>
                </ul>
            </div>
</div>

Я пытаюсь получить идентификатор изображения, щелкнув его, а затем исчезнув. У меня также есть логическая переменная, такая же, как и для идентификатора изображения, который я хочу установить в значение true, если оно равно false.

Если переменная, совпадающая с идентификатором изображения, уже имеет значение true, тогда я хочу установить для нее значение false и затемнить изображение.

К сожалению, моя функция щелчка вообще не работает.

это то, что я имею до сих пор:

$("img.filters").click(function () {
alert("clicked");
    var id = ($(this).attr('id'));
    $('#' + id).fadeTo("slow", 1.00);
});

, поскольку он вообще не работает, я полагаю, что с элементом что-то не так.

Заранее спасибо за помощь!

Ответы [ 6 ]

2 голосов
/ 07 января 2012

Вместо захвата IMG ID вы можете просто использовать this:

Использование метода on позволяет добавлять элементы после привязки события.

$(document).on("click", ".filters img", function() { 
    alert("clicked");
    $(this).fadeTo("slow", 1);
});

О вашемпеременные, есть ли какие-либо изменения, которые вы можете изменить в объекте?

var vars = {
    categoryAdvertising: false,
    categoryInformation: false
};

, затем вы можете переключать их, используя: (в вашем событии щелчка)

vars[this.id] = !vars[this.id];

this относится кщелкнул элемент DOM.Таким образом, вы можете просто захватить идентификатор, используя this.id

См .: http://jsperf.com/jquery-attr-id-vs-this-id

ПРИМЕЧАНИЕ:

Se, как приятно оператор !работает.

!true is false
!false is true

Если вы связываете событие click с тегом li, как я это сделаю позже.Вы можете захватить идентификатор, используя:

$(this).children("img")[0].id

или

$(this).children("img").attr("id");

Вы просто хотите исчезнуть, чтобы переключить изображение? Вы можете использовать fadeToggle

$(document).on("click", ".filters img", function() { 
   alert("clicked");
   $(this).fadeToggle("slow");
});

проблема здесь в том, что когда изображение скрыто, оно получает display:none; и, следовательно, не может быть нажато снова: http://jsfiddle.net/jJDvc/1/

Исправление может бытьпривязать событие click к его родительскому элементу (элемент li): http://jsfiddle.net/jJDvc/2/

$(document).on("click", ".filters li", function() {
   $(this).children("img").fadeToggle("slow");
});

, а затем иметь некоторый стиль для родительского элемента.

li {
    height:100px;
    width:100px;
}

Надеюсь, что это ответит на некоторые из ваших многочисленных вопросов.

0 голосов
/ 07 января 2012

Это переключает непрозрачность изображений и устанавливает логические значения, как требуется ...

http://jsfiddle.net/johncmolyneux/kYz8k/3/

0 голосов
/ 07 января 2012

В вашем коде jquery вы указали как img.filter , что означает img тег с именем класса в виде filters , но в вашем html нетТег img с фильтром имени класса, поэтому измените код, как показано ниже

$(".filters li img").click(function () {
alert("clicked");
     $(this).fadeTo("slow", 1.00);
});

Надеюсь, это решит вашу проблему

0 голосов
/ 07 января 2012

Попробуйте:

$(".filters img").live('click',function () {
  alert("clicked");
  $(this).fadeTo("slow", 1.00);
  return false;
});

Или создайте класс для изображений, которые вы хотите вызвать событие, и выберите их по этому классу. Предполагая, что новый класс ".clicking-images":

$(".clicking-images").live('click',function () {
  alert("clicked");
  $(this).fadeTo("slow", 1.00);
  return false;
});
0 голосов
/ 07 января 2012

Ваш селектор должен быть:

$(".filters img").click(function () {
    alert("clicked");
    var id = ($(this).attr('id'));
    $('#' + id).fadeTo("slow", 1.00);
});
0 голосов
/ 07 января 2012

Ваш селектор неверен, должен быть

$(".filters img").click(function () { 
alert("clicked"); 
    var id = ($(this).attr('id')); 
    $('#' + id).fadeTo("slow", 1.00); 
}); 
...