2015-05-30 2 views
0

Я использую плагин Jeditable и не понимаю, почему все параметры не указаны в запросе.ближайший ('tr') не работает с Jeditable

HTML перед визуализацией:

<tbody> 
    @foreach ($liste_eleve_note as $eleve_note) 
    <tr data-user-id="{{{ $eleve_note->id_personne }}}"> 
     <td>{{{ $eleve_note->nom }}}&nbsp;{{{ $eleve_note->prenom }}}</td> 
     <td class="edit_area" >{{{ $eleve_note->note_num }}}</td> 
     <td class="edit_area" >{{{ $eleve_note->appreciation }}}</td> 
    </tr> 
    @endforeach 
</tbody> 

Вынесено HTML:

<tbody> 
    <tr data-user-id="3"> 
     <td>HACKETT&nbsp;Steve</td> 
     <td class="edit_area" >22.00</td> 
     <td class="edit_area" ></td> 
    </tr> 
    <tr data-user-id="106"> 
     <td>BRUFFORD&nbsp;Bill</td> 
     <td class="edit_area" >0.00</td> 
     <td class="edit_area" ></td> 
    </tr> 
    <tr data-user-id="107"> 
     <td>LENNON&nbsp;John</td> 
     <td class="edit_area" ></td> 
     <td class="edit_area" ></td> 
    </tr> 
</tbody> 

JQuery:

$('.edit_area').editable($('#url_for_ajax').val()+'/edit_note_epreuve', { 
    indicator : 'Saving...', 
    tooltip : 'Click to edit...', 
    onblur : 'submit', 
    submitdata : { 
     'user_id'  : $(this).closest('tr').data('user-id'), 
     'id_epreuve' : $('#id_epreuve').val(), 
     '_token'  : $('meta[name="_token"]').attr('content') 
    }, 
    onerror : function(settings,original,xhr) { 
     alert("It wasn't possible to edit. Try again"); 
     console.log("XHR Status: " + xhr.status); 
    } 
}); 

Запрос отправляется на сервер:

enter image description here

Отсутствует параметр user_id. У нас есть параметры id и value, которые автоматически добавляются плагином, и у нас есть параметры _token и id_epreuve, которые были добавлены JavaScript.

Но не параметр user_id.

Почему это происходит?

+0

"* Мой HTML-код: *" (примечание непроверенной!) - это не (только) HTML; как выглядит HTML, когда этот скрипт закончил работать с ним? –

+0

Я добавил последний html. Я не вижу ничего, что могло бы объяснить проблему. – Dom

+1

'this' (в вашем объекте' submitdata') не означает, что вы (почти наверняка) хотите этого. Я думаю, вы ожидаете, что это «то, что было отредактировано», но оно фактически запускается сразу же после установки обработчика, поэтому это контекст, в котором вызывается '.editable()'. Скорее всего, это 'window', поэтому' $ (this) .closest ('tr') 'не собирается ничего сопоставлять. –

ответ

0

Похоже, что $(this).closest('tr').data('user-id') ожидает this быть установлен на td.edit_area вы звоните editable() на ..., но как написано, что вы используете любой this, когда вы делаете $('.edit_area').editable() вызов. Если this находится за пределами вашего тега <tr>, closest() не найдет data-user-id, что может исключить его из строя.

Это может исправить:

$('.edit_area').each(function(){ 
    $(this).editable($('#url_for_ajax').val()+'/edit_note_epreuve', { 
     indicator : 'Saving...', 
     tooltip : 'Click to edit...', 
     onblur : 'submit', 
     submitdata : { 
      'user_id'  : $(this).closest('tr').data('user-id'), 
      'id_epreuve' : $('#id_epreuve').val(), 
      '_token'  : $('meta[name="_token"]').attr('content') 
     }, 
     onerror : function(settings,original,xhr){ 
      alert("It wasn't possible to edit. Try again"); 
      console.log("XHR Status: " + xhr.status)} 
    }); 
}); 
+0

Спасибо, Оноре, я понял. Я просто тестировал его, и он отлично работает. Большое спасибо, я был на эту проблему в течение 4 часов. – Dom

+0

Добро пожаловать, рад помочь! Рядом с ответом вы можете найти галочку ... =) –

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