2016-11-08 56 views
-1

我試圖在成功的xhrHttpRequest時單擊按鈕的同一個parentDiv中更新divToUpdate的值。我已經過了這個對象作爲參數傳遞給發送該xhrHttpRequest的功能,但我無法更新DIV:divToUpdate如何在xhrHttpRequest中使用「this」正確更新div

<div class="parentDiv" > 
    <div class="divToUpdate" style="display:none"></div> 
    <div class="btn-group"> 
     <button class="button" type="button" >Update</button> 
    </div> 
</div> 
<div class="parentDiv" > 
    <div class="divToUpdate" style="display:none"></div> 
    <div class="btn-group"> 
     <button class="button" type="button">Update</button> 
    </div> 
</div> 

JS代碼(最小的示例代碼)

$(function() 
{  
    function bindKeyPress() 
    { 
    $(document).keyup(function(event) { 
     switch(event.which) { 
     case 37: // left 
      //do something 
      break; 
     case 38: // up 
      send(url,data,this); 
      break; 
     } 
    }); 
    } 
}); 

function send (url,data,this) 
{ 
    var xhr = new XMLHttpRequest(); 
    var instance = this; 
    xhr.open('POST', url, true); 
    xhr.onreadystatechange = function() 
    { 

    if (xhr.readyState === 4 && xhr.status === 200) 
    { 
     var text = xhr.responseText; 
     var jsonResponse = JSON.parse(text); 
     var filename = jsonResponse.filename; 
     $(instance).closest('.parentDiv').children('.divToUpdate').text(filename); 
    } 
    } 
    xhr.send(data); 
} 

我怎樣才能更新與點擊按鈕相對應的正確div?

+1

''this''是對'document'的引用,因爲這就是您的情況。你可能想使用'event.target' – Adam

回答

1

您無法命名參數this。相反,設定與使用.call()所需的背景:這樣發送將有this定義爲你打算:

send.call(this, url, data); 
    // ... 

function send (url, data) // no this here 
// ... you can use `this` here... 

如果你想點擊的元素是this值,然後調用發送如下:

send.call(event.target, url, data); 
相關問題