簡體   English   中英

jQuery插件回調函數和參數設置問題

[英]jQuery plugin callback function and parameter settings issue

我已經開發了以下插件

(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的click事件的參數。 所以看起來

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

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

如果我沒看錯,您要做的就是將callbackFunction包裝在一個功能塊中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM