2017-05-04 140 views
0

在下面的代碼中,我有util.doSomething()方法,它將json對象作爲參數。當util完成時,它通過傳遞response作爲參數來調用onDone事件處理程序。將額外參數傳遞給事件處理程序

我想知道下面的代碼是否有可能通過idupdate事件處理程序?

$(function(){ 
    $('#btn').click(function(){ 

    var id = $(this).attr('id'); 

    util.doSomething({ 
      property1: "SomeValue1", 
      property2: "SomeValue2", 
      onDone: update //ho do i pass id to update event handler? 
     }) 
    }) 

    function update(response,id) 
    { 
     //update 
    } 
}) 

我知道我可以使用內聯事件處理程序獲取id。像

$("#btn").click(function(){ 
    var id = $(this).attr('id'); 

    util.doSomething({ 
      property1: "SomeValue1", 
      property2: "SomeValue2", 
      onDone: function(response){ 
       // now i can use id here 
     } 
     }) 
    }) 
+0

到額外的參數傳遞不知道你的'doSomething'是做什麼的,它不是真的有可能知道可以做些什麼。你可以將id附加到調用'onDone'的對象上。通常情況下,事件是通過將this設置爲調用對象或元素來運行的。 –

+0

所以最新錯誤使用內聯函數?否則你需要修改'doSomething'來增加'id'參數並將其傳遞給'onDone' – Jag

回答

1

可以使用.bind方法和參數對象在函數內部訪問你想在

$(function(){ 
    $('#btn').click(function(){ 

    var id = $(this).attr('id'); 

    util.doSomething({ 
      property1: "SomeValue1", 
      property2: "SomeValue2", 
      onDone: update.bind(this, id) 
     }) 
    }) 

    function update() 
    { 
     console.log(arguments); // inside arguments you should see all your parameters 
     // arguments[0] your id 
     // arguments[1] your response 
    } 
}) 
1

而不是設置onDoneupdate的,你可以將其設置爲調用update你想要的參數的函數。

util.doSomething({ 
    property1: "SomeValue1", 
    property2: "SomeValue2", 
    onDone: function(response) { 
     return update(response, id); 
    } 
}) 
相關問題