2016-01-20 75 views
0

我有多行包含文件上傳控制onchange事件的特定行fileupload控制我選擇第一列文本並通過ajax請求發送它的值。如何將事件的「this」對象更改爲其他函數?

$(document).on('change','#uploadSupportingDoc',function(){ 
    console.log("on change called!"); 
    var questionId = $(this).parent().siblings(":first").text(); // 1st column 

    console.log("fileUpload called with Id =>"+questionId); 
    uploadFile(questionId,this); 

});  

但是,有一列(用css class .fileuploadSuccess),我想更改圖標顯示上傳成功或失敗。

function uploadFile(questionId,row){ 
console.log("fileUpload called with Id =>"+questionId); 

var isUploaded = false; 
$('#uploadSupportingDoc').fileupload({ 
    url: 'uploadSupportingDoc.html', 
    formData: {questionId: questionId }, 
    acceptFileTypes: /(\.|\/)(jpe?g)$/i, 
    maxFileSize: 100, 
    dropZone: null, 
    pasteZone: null, 
    fileInput: $(this), 
    dataType: 'json', 
    add: function(e, data){ 

     $(row).closest('tr').children('td.fileuploadSuccess').html('<img src="./img/ajax-loader.gif" alt="Uploading..." />'); 
     data.submit(); 
    }, 
    done: function (e, data){ 
     var response = data.result.files[0]; 

     if(!response.isRequestValid) 
     { 
      window.location = "requestDenied.html"; 
     } 
     else 
     { 
      if(response.status) 
      { 
       $(row).closest('tr').children('td.fileuploadSuccess').html("<span class=\"glyphicon glyphicon-ok\" aria-hidden=\"true\"></span>") 
      } 
      else 
      { 
       $(row).closest('tr').children('td.fileuploadSuccess').html("<span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>")    
      } 
     } 
    }, 
    fail: function(e, data){ 
     console.log("failed"); 
     console.log(data.jqXHR.responseText); 
     console.log(data.jqXHR+"\m"); 
    }, 
    always: function (e, data){ 

    } 
}); 


} 

我試圖發送這種方式,

uploadFile(questionId,this); 

,並試圖訪問它這個樣子,

$(row).closest('tr').children('td.fileuploadSuccess').html("<span class=\"glyphicon glyphicon-ok\" aria-hidden=\"true\"></span>"); 

Howerer這是行不通的,每次它正在改變的價值第一排列。爲什麼會發生?這種要求的任何解決方案?

+0

你有一份在線我們可以玩嗎? –

+0

不幸我現在沒有codebase,明天會發布jsfiddle。 – piechuckerr

+0

是否有任何具體的原因,你使用相同的ID每行「#uploadSupportingDoc」?這可能是問題,因爲id選擇器總是返回第一個對象。 – Diljohn5741

回答

1

其實,你不需要在那裏傳遞行。 通作要更新HTML元素:

$(document).on('change','#uploadSupportingDoc',function(){ 
    console.log("on change called!"); 
    var questionId = $(this).parent().siblings(":first").text(); // 1st column 
    console.log("fileUpload called with Id =>"+questionId); 

    var cell = $(this).parent().siblings('.fileuploadSuccess'); 
    uploadFile(questionId, cell); 

}); 

變化function uploadFile(questionId,row){function uploadFile(questionId,cell){

然後,您可以簡化: $(row).closest('tr').children('td.fileuploadSuccess').html(..);

cell.html(...);

+0

$(row).closest('tr')。children('td.fileuploadSuccess')。html(「icon_here」);行實際上是由「this」變量組成的參數名稱。與您提供的解決方案如何訪問具有CSS類fileuploadSuccess的孩子td? – piechuckerr

+0

檢查更新後的答案 –

相關問題