2010-07-09 4 views
0

j'ai développé ci-dessous le pluginfonction de rappel plugin jQuery et paramètres question

(function($) { 

$.fn.addressSearch = function(settings) { 

    settings = jQuery.extend({ 
     searchClass: "quickSearch",        
     checkElement: "href",         
     dataElement: "data",         
     countryListClass: "countryList",      
     countryCode: "11455",         
     errorMsg: "You can only search for address in the UK.", 
     houseNumberClass: "TextboxHouseNumber",     
     postcodeClass: "postcode",        
     addressLine1Class: "addSearchLine1",      
     addressLine2Class: "addSearchLine2",      
     addressLine3Class: "addSearchLine3",     
     addressTownCityClass: "addTownCity",      
     ajaxUrl: "/WebService/addressLook",    
     submitType: "POST",          
     dataType: "xml",          
     parameters: "",           
     addressProcessURL: "",         
     callbackFunctionSingleAddress: selectAddress, //Callback 1  
     callbackFunctionMultipleAddress: quickBoxSearch, //Callback 2  
     useExternalProcessPage: false,       
     validateCountry: true         

    }, settings); 

    var jQueryMatchedObj = this;         

    function _initialize() { 
     _startModal(this, jQueryMatchedObj);      
     return false;           
    } 
    function _startModal(objClicked, jQueryMatchedObj) { 
     $j(objClicked).addClass(settings.searchClass); 

     var countryList = "." + settings.countryListClass + ""; 

     if (settings.validateCountry) { 
      if ($j(countryList) && $j(countryList).val() != settings.countryCode) { 
       alert(settings.errorMsg); 
       return false; 
      } 
     } 

     if (settings.parameters) { 
      $j.ajax({ 
       url: settings.ajaxUrl, 
       type: settings.submitType, 
       dataType: settings.dataType, 
       data: settings.parameters, 
       success: function(res) { 
        var addresses = eval(res.getElementsByTagName('string')[0].firstChild.data); 
        if (addresses.length == 0) 
         alert('Your address could not be found, please enter it manually'); 
        else if (addresses.length == 1) { 
         //Callback 1 and parameters set here 
         settings.callbackFunctionSingleAddress(
          addresses[0].addressLine1, 
          addresses[0].addressLine2, 
          addresses[0].addressLine3, 
          addresses[0].town, 
          settings.TextboxHouseNumber, 
          settings.postcodeClass, 
          settings.addressTownCityClass, 
          settings.addressLine1Class, 
          settings.addressLine2Class, 
          settings.addressLine3Class 
          ); 
        } else if (addresses.length > 1) { 
         //Callback 2 and parameters set here 
         settings.callbackFunctionMultipleAddress(
          settings.callbackFunctionSingleAddress, 
          addresses, 
          settings.useExternalProcessPage, 
          settings.TextboxHouseNumber, 
          settings.postcodeClass, 
          settings.addressTownCityClass, 
          settings.addressLine1Class, 
          settings.addressLine2Class, 
          settings.addressLine3Class 
          ); 
        } 
       } 
      }); 
     } 
     return false; 
    } 
    return this.unbind('click').click(_initialize); 
} 

})(jQuery); 

Au-dessus fonctionne très bien sans aucun problème. J'appelle cela avec le code ci-dessous

$('#mydiv').click(function() { 
    $(this).addressSearch(/* ... */); 
}); 

Mais maintenant, je veux étendre encore plus loin avec le passant à la fois des fonctions de rappel et les paramètres dans les paramètres pour le branchement de sorte que le branchement sera plus robuste.

comment dois-je faire cela, au fond, je veux passer

    settings.callbackFunctionSingleAddress(
         addresses[0].addressLine1, 
         addresses[0].addressLine2, 
         addresses[0].addressLine3, 
         addresses[0].town, 
         settings.TextboxHouseNumber, 
         settings.postcodeClass, 
         settings.addressTownCityClass, 
         settings.addressLine1Class, 
         settings.addressLine2Class, 
         settings.addressLine3Class 
         ); 

ET

    settings.callbackFunctionMultipleAddress(
         settings.callbackFunctionSingleAddress, 
         addresses, 
         settings.useExternalProcessPage, 
         settings.TextboxHouseNumber, 
         settings.postcodeClass, 
         settings.addressTownCityClass, 
         settings.addressLine1Class, 
         settings.addressLine2Class, 
         settings.addressLine3Class 
         ); 

en tant que paramètres sur l'événement clic d'un div. Donc, il ressemblerait,

$('#mydiv').click(function() { 
    $(this).addressSearch({ 
    callbackFunctionSingleAddress: callbackFuntion(param1, param2) 
    }); 
}); 

Ci-dessus est l'idée. Est-ce possible? S'il vous plaît aider

Répondre

0

Si je lis ce droit, tout ce que vous devez faire est de l'envelopper dans callbackFunction un bloc fonctionnel:

$('#mydiv').click(function() { 
    $(this).addressSearch({ 
    callbackFunctionSingleAddress: function() { callbackFuntion(param1, param2); } 
    }); 
});