2010-07-09 104 views
0

我已經開發了以下插件jQuery插件回調函數的參數設置的問題

(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); 

以上沒有任何問題工作正常。我下面

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

但是現在調用此方法的代碼,我想在設置的同時傳遞迴調函數和參數封堵所以堵塞將更爲強勁,甚至進一步擴大這一點。

我怎麼做到這一點,基本上我想通過

    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 
         ); 

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

作爲一個div的單擊事件參數。所以它看起來像,

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

以上是這個想法。這可能嗎?請幫助

回答

0

如果我讀這一權利,所有你需要做的是包裹在callbackFunction參數功能塊:

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