Доступ к атрибуту данных с помощью jQuery возвращает undefined?
внутри моего зрения у меня есть кнопка, как показано ниже:
<button data-assigned-id="@IdUser" onclick="updateClick()" type="button" class="btn btn-sm btn-default"></button>
мой div
<div id="partial_load_div">
</div>
скрипт
function updateClick() {
var id = $(this).data('assigned-id');
$('#partial_load_div').show();
$('#partial_load_div').load('/Users/UpdatePartial?id=' + id);
}
идентификатор всегда отображается как неопределенный, я проверил и @IdUser
всегда имеет значение
затем в chrome dev я получил ошибку
GET http://localhost:19058/Users/UpdatePartial?id=undefined 400 (Неправильный Запрос)
есть идеи, как это исправить?
2 ответов
в текущем скрипте, $(this)
относится к Window
объект (не ваша кнопка), который не имеет это undefined
.
вы можете решить эту проблему, передав элемент в функцию
<button data-assigned-id="@IdUser" onclick="updateClick(this)" type="button" ... ></button>
function updateClick(element) {
var id = $(element).data('assigned-id');
....
однако лучший подход-использовать Ненавязчивый Javascript вместо того, чтобы загрязнять вашу разметку поведением.
<button data-assigned-id="@IdUser" id="mybutton" type="button" class="btn btn-sm btn-default"></button>
$('#mybutton').click(function() {
var id = $(this).data('assigned-id'); // $(this) refers to the button
....
});
при чтении атрибутов данных с помощью data()
вам нужно удалить -
и регистр значение. Итак, вы хотите:
var id = $(this).data('assignedId');
на docs on data () показать это:
начиная с jQuery 1.4.3 HTML 5 data-атрибуты будут автоматически подъехал к объекту данных jQuery. Обработка атрибутов с встроенные тире были изменены в jQuery 1.6 в соответствии с W3C HTML5 спецификация.
для пример, учитывая следующий HTML:
<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>
будет работать весь следующий код jQuery.
$( "div" ).data( "role" ) === "page"; $( "div" ).data( "lastValue" ) === 43; $( "div" ).data( "hidden" ) === true; $( "div" ).data( "options" ).name === "John";
второй оператор кода выше правильно относится к data-атрибут последнего значения элемента. В случае отсутствия данных с переданным ключом jQuery выполняет поиск среди атрибутов элемент, преобразующий строку в верблюжьей шкуре в пунктирную строку, а затем добавления данных к результату. Таким образом, строка lastValue преобразуется к data-last-value.
Я не заметил, как ваша привязка события click. Если вы хотите использовать $(this)
вы должны связать событие с помощью jquery. Нужно так:
<button data-assigned-id="works" id="button">
clickme</button>
$(window).ready(function() {
//bind the event using jquery not the onclick attribute of the button
$('#button').on('click', updateClick);
});
function updateClick() {
alert($(this).data('assignedId'));
}