2015-12-21 2 views
-4

Я знаю, что это дубликат, но, пожалуйста, смотрите ниже;Данные атрибута JQuery не работают

мой якорь ссылка

<a onclick="updateStatus(this)" data-pid="@job.Id" data-act="@action.Activity" data-sts="@action.StatusToSet" class="btn btn-xs btn-circle @action.CssClass @action.BackgroundColor" href="#"> 
              @action.Text 
             </a> 

мой Javascript функция

function updateStatus(elem) { 
    var preAssignedJobId = $(elem).attr("data-pid"); 
    var activity = $(elem).attr("data-act"); 
    var statusToSet = $(elem).attr("data-sts"); 
} 

, но я получаю Undefined для всех выше. Я не вижу никакой проблемы, может кто-то указать. Моя версия jquery - 1.11.

+3

'this' не то, что вы думаете. –

+0

Хотя это не связано с вашей проблемой, я хочу указать, что '.data (" pid ")' потенциально преобразует ваш id в целое число. Это может быть или не быть желательным. Использование '.attr (" data-pid ")' возвращает строку, которую вы можете обрабатывать более предсказуемо. – Steve

ответ

2

Вы должны пройти this в качестве параметра при исходящем звонке updateStatus()

<a onclick="updateStatus(this)" data-pid="@job.Id" data-act="@action.Activity" data-sts="@action.StatusToSet" class="btn btn-xs btn-circle @action.CssClass @action.BackgroundColor" href="#"> 
              @action.Text 
             </a> 

И аргумент этой функции

function updateStatus(param) { 
    // Then use param 
    var preAssignedJobId = $(param).data("pid"); 
    var activity = $(param).data("act"); 
    var statusToSet = $(param).data("sts"); 
} 
0

Пройди свой элемент в функцию.

function updateStatus(elm) { 
 
    var preAssignedJobId = $(elm).data("pid"); 
 
    var activity = $(elm).data("act"); 
 
    var statusToSet = $(elm).data("sts"); 
 
    $(elm).text("hhH"); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a onclick="updateStatus(this)" data-pid="@job.Id" data-act="@action.Activity" data-sts="@action.StatusToSet" class="btn btn-xs btn-circle @action.CssClass @action.BackgroundColor" href="#"> 
 
              @action.Text 
 
             </a>

-1

Поскольку вы уже используете JQuery, удалить OnClick из HTML кода и нам обработчик событий JQuery для этого.

HTML

<a id="anch1" data-pid="@job.Id" data-act="@action.Activity" data-sts="@action.StatusToSet" class="btn btn-xs btn-circle @action.CssClass @action.BackgroundColor" href="#"> 
              @action.Text 
             </a> 

JQuery

$(function(){ 
    $("#anch1").click(function(){ 
     var $this = $(this); 
     var preAssignedJobId = $this.data("pid"); 
     var activity = $this.data("act"); 
     var statusToSet = $this.data("sts"); 
    }); 
}); 
0

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

$('a').on("click",function(e) 
{ 
    //e.preventDefault(); 
    var preAssignedJobId = $(this).data("pid"); 
    alert(preAssignedJobId); 
    var activity = $(this).data("act"); 
    var statusToSet = $(this).data("sts"); 

}); 

Пример: https://jsfiddle.net/DinoMyte/opmy3n8j/

Смежные вопросы