Подтвердить что ты не робот

Использование атрибутов данных с помощью jQuery

У меня есть эта кнопка:

<button type="button" class="themeChanger" data-themeValue="grid" value="Grid">
   <img src="templateImages/Icon_200.png" />                
</button>

И этот jQuery:

$(".themeChanger").click(function () { 
    alert($(this).attr("data-themeValue")); 
    alert($(this).data("themeValue")); 
});

По какой-то причине первое предупреждение показывает "сетку", как должно, но второе показывает undefined. Есть что-то глупое, которого я пропускаю?

4b9b3361

Ответ 1

Я думаю, что данные будут выглядеть на нижних строках: alert($(this).data("themevalue")) //grid

или если вы хотите использовать themeValue, вам нужно использовать:

изменить:

Я ошибался, он не имеет ничего общего с нижними строками, вы можете использовать themeValue, если у вас есть атрибут: data-theme-value, тогда вы вызываете его с помощью $(element).data( "themeValue" )

<button class="themeChanger" data-themeValue="Theme1" data-theme-value="Theme2"></button>

$(".themeChanger").click(function() {
    var el = $(this);

    alert($(this).data("themeValue")); //Theme2
    alert($(this).data("themevalue")); //Theme1
});

Ответ 2

Как отмечено в этой статье jQuery для обучения, атрибуты HTML5 data-* обрабатываются с помощью преобразования браузера → JS так же, как обрабатываются имена CSS - то есть:

  • удаляется ведущий data- (шаг, не необходимый в сравнении имен CSS, который я нарисовал выше)
    • data-specialInfo становится specialInfo
    • data-more-specialInfo становится more-specialInfo
  • оставшееся имя attr разбивается на -
    • specialInfo становится [ specialInfo ]
    • more-specialInfo становится [ more, specialInfo ]
  • первая из результирующих разделенных частей отбрасывается на все нижние регистры
    • [ specialInfo ] становится [ specialInfo ]
    • [ more, specialInfo ] становится [ more, specialInfo ] (без изменений, поскольку первая часть была уже ниже)
  • остальная часть результирующих разделенных частей упадет до нижнего регистра, но их первая буква сделана в верхнем регистре
    • [ specialInfo ] становится [ specialInfo ] (без изменений, потому что не было других частей)
    • [ more, specialInfo ] становится [ more, specialInfo ]
  • Теперь модифицированные пользователем части возвращаются в пустую строку
    • [ specialInfo ] становится specialInfo
    • [ more, specialInfo ] становится moreSpecialinfo

В этом случае ваш атрибут data-themeValue доступен через $(this).data("themevalue"). Атрибут data-theme-value будет доступен через $(this).data("themevalue").

Это ужасно запутанно, если вы не узнаете используемый механизм.

Ответ 3

Проблема в верблюжьем корпусе. Для ясности я придерживался формата data-theme-value для ваших атрибутов.

http://jsfiddle.net/NkHEx/2/

jquery автоматически преобразует .data('some-value') в data('someValue')

Обратите внимание, что оба предупреждения вызываются grid

Ответ 4

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

Попробуйте этот jsfiddle - http://jsfiddle.net/FloydPink/fb6Y6/

<button type="button" class="themeChanger" data-theme-value="grid" value="Grid">
   data-theme-value                
</button>

<button type="button" class="themeChanger" data-themeValue="grid" value="Grid">
   data-themeValue
</button>

$(".themeChanger").click(function () {
    alert($(this).attr("data-themeValue"));
    alert($(this).data("themeValue"));
});