views:

126

answers:

3

I'm using the Google Search API to load some Search results into my page. I'd like to set an argument to the callback function that says which div the search results should attach themselves to.

Here's the callback function definition, per Google:

.setSearchCompleteCallback(object, method, opt_arguments?)

Here's how I'm doing it: searcher.setSearchCompleteCallback (document, function() { alert(opt_arguments[0].id); }, new Array(infodiv) );

The documentation explains: "Applications may optionally pass in a context argument using opt_arguments which is then passed to the specified method."

Yes -- but how? I've passed in the context argument, but how do I refer to it within the function? I've tried just calling opt_arguments, but js errors clearly show that it's not defined.

The documentation is here.

Thank you!!

A: 

If you pass a context argument, your callback method should take that context argument as a parameter.

Anon.
+1  A: 

Basically, it means the following. You can bind the event handler like such:

function searchComplete(message) {
   alert(message);
}

function OnLoad() {
  var searchControl = new google.search.SearchControl();
  var webSearch = new google.search.WebSearch();

  searchControl.addSearcher(webSearch);
  searchControl.draw(document.getElementById("searchcontrol"));
  searchControl.setSearchCompleteCallback(this, searchComplete, "Search Done!");

  searchControl.execute('Google')
}
google.setOnLoadCallback(OnLoad);

The example code above will display a message saying "Search Done!" when finished.

Andrew Moore
Worked beautifully, thanks.
Summer
+1  A: 

It should look something like this:

var myCallbackObject = 
{
    myCallbackFunction: function(args)
    {
        // args will be whatever someArgs is set to below
        alert(args); // Array("hey","hello")
    }
}

var someArgs = ["hey", "hello"];
// (... set up mySearchObject as the google Search object here)
mySearchObject.setSearchCompleteCallback(myCallbackObject, myCallbackFunction, someArgs);
ithcy