2010-07-09 102 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); } 
    }); 
});