2016-01-23 123 views
-1

如何在輸入後看到最近的<i>元素。如何找到最近的元素

我的html代碼:

<td data-sort-initial="true" data-value="azert" style="padding:7px;position:relative;"> 
          <input class="form-control input-sm edit2" data-nom_champ="contact_label" data-id_ecole_contact="10" name="contact_label" type="text" value="azert"> 
          <i class="fa fa-spinner fa-spin" id="waiting_label_10" style="display:none;position:absolute;right:10px;top:13px;"></i> 
         </td> 

我的js代碼:

$.ajax({ 
      type  : 'POST', 
      url   : $('#url_for_ajax').val()+'/update_ecole_contact_ajax', 
      dataType : 'json', 
      data  : {_token:$('meta[name="_token"]').attr('content'),id_ecole_contact:$(this).data('id_ecole_contact'),nom_champ:$(this).data('nom_champ'),new_value:$(this).val()}, 
      beforeSend : function() { 
       $(this).closest('i').next().show(); 
       // $('#waiting_valeur'+id_ecole_contact).show(); 
      }, 
      success  : function(reponse) { 
       $('#waiting_'+id_ecole_contact).hide(); 
      } 
     }); 

在這個例子中,<i>元素仍然是不可見的。問題是這裏:

$(this).closest('i').next().show(); 

但我不知道究竟是什麼。

+1

'this'是指AJAX的選擇對象'$ .ajax'回調。現在你的問題還不清楚,因爲我們不知道你稱之爲ajax請求的上下文。但是要在ajax回調中設置相關的上下文,請使用'context:this,'作爲選項。如果'this'指的是父函數作用域中的'input'元素,那麼它應該是:'$(this).next()。show();'。這就是說,因爲一個id被設置並且id必須在文檔上下文中是唯一的,所以你可以使用:'$('#waiting_label_10')。show();' –

+0

我有一個輸入,我發送一個ajax請求當這個輸入的值改變時。這個ajax請求在數據庫中做了一些更新。在這個過程中,我想在輸入後顯示一個微調。它更清楚嗎?提前致謝。 – Dom

+0

當我嘗試$(this).next()。show():它工作在ajax請求之外。但它不起作用在ajax請求中,進入beforeSend部分 – Dom

回答

1

I detail : I have an input and I send and ajax request when the value of this input changes.

嘗試使用event.target.next()

$("input").change(function(event) { 
    $.ajax({ 
    type: 'POST', 
    url: $('#url_for_ajax').val() + '/update_ecole_contact_ajax', 
    dataType: 'json', 
    data: { 
     _token: $('meta[name="_token"]').attr('content'), 
     id_ecole_contact: $(this).data('id_ecole_contact'), 
     nom_champ: $(this).data('nom_champ'), 
     new_value: $(this).val() 
    }, 
    beforeSend: function() { 
     // here, `event.target` is `input` 
     $(event.target).next("i").show(); 
     // $('#waiting_valeur'+id_ecole_contact).show(); 
    }, 
    success: function(reponse) { 
     $('#waiting_' + id_ecole_contact).hide(); 
    } 
    }); 
}) 
+0

我有這個錯誤:ReferenceError:事件未定義 – Dom

+0

@ user2672338在.change()事件中有'$ .ajax()'嗎? '.change()'事件處理函數中包含'event'參數嗎? – guest271314

+0

非常感謝,現在工作正常。 「事件」丟失。 Merci beaucoup。 – Dom