2017-05-04 2 views
0

In dem Code unten habe ich util.doSomething() Methode, die Json-Objekt als Parameter übernimmt. Wenn util etwas ausführt, ruft es den Event-Handler auf, indem ein response als Parameter übergeben wird.Übergabe Extra-Parameter zu Event-Handler

Ich wollte in dem Code unten wissen, wenn es möglich ist, id zu update Event-Handler zu übergeben?

$(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 
    } 
}) 

Ich weiß, ich kann ID mit Inline-Event-Handler bekommen. wie

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

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

passieren wollen, ohne zu wissen, was Ihre 'doSomething' tut, ist es nicht wirklich möglich zu wissen, was getan werden kann. Sie können die ID an das Objekt anhängen, das 'onDone' aufruft. Normalerweise werden Ereignisse ausgeführt, wobei 'this 'auf das aufrufende Objekt oder Element gesetzt wird. –

+0

Was ist falsch mit der Inline-Funktion? Andernfalls müssen Sie 'doSomething' ändern, um einen zusätzlichen 'id'-Parameter zu übernehmen und an'onDone' zu ​​übergeben – Jag

Antwort

1

Sie können die .bind Methode und die Argumente Objekt innerhalb der Funktion zusätzliche Parameter zuzugreifen, die Sie in

$(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

Statt onDone-update der Einstellung, können Sie es auf eine Funktion eingestellt, die update mit den Argumenten fordert Sie wollen.

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