2016-12-28 3 views
2

У меня есть этот JS код:Получить ближайший тр внутри функции JS

$(".contenteditable").keyup(function(){ 
    var data = $(this).text(); 
    var domId = document.activeElement.id; 
    var userId = $(this).closest('tr').find('[type="hidden"]:first').val(); 
    $.post 
    (
     "https://stackoverflow.com/users/"+userId, 
     { 
      data,domId,userId,'_method':'patch' 
     }, 
     function(data) 
     { 
      console.log(data); 
     } 
    ) 
}); 

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

function keyUpUpdate() 
{ 
    var data = document.activeElement.textContent; 
    var domId = document.activeElement.id; 
    var userId = $(this).closest('tr').find('[type="hidden"]:first').val(); 

    console.log(userId); 
} 

userId не работает внутри этой функции. Как я могу получить ближайший tr, а затем первое скрытое значение типа ввода из активного элемента внутри функции.

+0

показать HTML и какие ошибки в консоли –

+0

пожалуйста, должен показать нам, как вы называете «keyUpUpdate()», потому что, может быть, у вас есть проблемы в контексте (этот объект) – Tobia

+0

неопределенным это ошибка в консоли –

ответ

3

this не имеет контекста внутри вашей функции вы должны отправить текущий объект в keyUpUpdate() в качестве параметра затем получить userId на основе этого объекта:

$(".contenteditable").keyup(function(){ 
    keyUpUpdate($(this)); 

    //Other code 
}) 

function keyUpUpdate(_this) 
{ 
    var data = document.activeElement.textContent; 
    var domId = document.activeElement.id; 
    var userId = $(_this).closest('tr').find('[type="hidden"]:first').val(); 
    console.log(userId); 
} 

Или, если вы только эту функцию для выполнения на keyup вы мог бы назвать это непосредственно то this объекта будет передан динамически:

$(".contenteditable").keyup(keyUpUpdate); 

function keyUpUpdate() 
{ 
    var data = document.activeElement.textContent; 
    var domId = document.activeElement.id; 
    var userId = $(this).closest('tr').find('[type="hidden"]:first').val(); 

    console.log(userId); 
} 

Надеется, что это помогает.