#javascript #jquery #dom
#javascript #jquery #dom
Вопрос:
Я изменяю текст кнопки на основе выбора пользователем.
$(".someClass").click(function() {
$("#someID_1").text($(this).prop("innerHTML"));
$("#someID_1").attr("data-value", $(this).data("value"));
someFunction("someID_1");
});
Затем я хочу вызвать функцию someFunction
.
function someFunction(someID) {
console.log(parseInt($("#" someID).data("value")))
if ( parseInt($("#" someID).data("value")) !== 10 ) {
// do something
} else {
// do something else
}
}
Происходит то, что console.log
отображает при самом первом вызове функции (таким образом, при самом первом щелчке) data-value
выделение. Однако, когда я выбираю что-то новое и функция выполняется снова, data-value
график через console.log
остается неизменным. Глядя на DOM
, data-value
обновляется, хотя.
Почему это?
Комментарии:
1. Позаботьтесь о своем
parseInt
вы должны указать свою базу :parseInt($("#" someID).data("value"), 10)
Ответ №1:
Поскольку .data()
используется только внутренний кэш, он использует атрибут data только в качестве значения по умолчанию, и обновление атрибута не влияет на него,
Вам нужно использовать .data(key, value)
для установки значения. Если вам нужно обновить DOM, используйте .attr()
$("#someID_1").data("value", $(this).data("value"));
Если вы используете attr()
для получения и установки, вы получите обновленное значение. То, что вы не должны использовать, — это сочетание attr()
и data()
. И если у вас нет реальной причины обновлять атрибут, используйте data()
для получения и установки значения.
Комментарии:
1.
data-value
Обновляется. Я вижу это в своемDOM
2. @Stophface,
.data()
использует значение атрибута только для значения по умолчанию, если вы обновляете атрибут, то он никогда не используется3. @Stophface Если вы хотите обновить атрибут, используйте jQuery
attr()
для получения и установки. Теперь, чтобы добавить больше путаницы, чтобы действительно обновить атрибут данных и объект, вы должны использовать: dataset . Установить:$("#someID_1")[0].dataset.value = 666;
и получить:$("#someID_1")[0].dataset.value
и простить за jQuery$.fn.data
, который, как вы можете видеть, может быть довольно запутанным. Вы можете сравнить довольно неожиданный результат между этим jsFiddle и этим4. @Stophface
When I update it again, it stays the same
Если вы используетеattr()
для получения и установки, нет, вы получите обновленное значение. То, что вы не должны использовать, — это сочетаниеattr()
иdata()
. И если у вас нет реальной причины обновлять атрибут, используйтеdata()
для получения и установки значения. Какой предпочтительный метод действительно зависит от вашего реального варианта использования5. @Stophface, этого не должно быть, если вы настраиваете using,
$("#someID_1").attr("data-value", $(this).data("value"));
затем используйте$("#someID_1").attr("data-value");
для его извлечения
Ответ №2:
Попробуйте
$(document).on('click', ".someClass", function()
{
//your event logic
}