JS parametru pe event si nativ

Salut,

Vin si eu cu o mica problema de JS.
Se da urmatoarea metoda

 accordionValidator : function(e){
    e.preventDefault();

    var $this = $(e.currentTarget);
    var $wrap = $this.closest('.checkoutBoxWrapper');
    var $field = $('[class^="input-"]', $wrap);
    var isValid = $field.valid();
    var goToNext = true;


    // Send 'goToNext' as data parameter
    // If it s false skip jumping on next accordion
    // Default : true
    if( !$.isEmptyObject(e.data) && typeof e.data.goToNext === 'boolean'  ) {
        goToNext = e.data.goToNext;
    }

    if( !isValid ) {
        return false;
    }


    // looks for first heading after current opened box
    var $next = $wrap.nextAll('legend').first();

    // looks for first previous legend for current wrapper => current heading
    var $current = $wrap.prevAll('legend').first();

    $current.addClass('validated collapsible');
    // re-init accordiont
    if( goToNext ){
        $next.addClass('collapsible').trigger('click');
    }

    // callback
    $cache.checkoutForm.trigger('accordionValidated', [{ nextEl : $next, currentEl : $current}]);


 },

metoda care este apelata pe event-urile “on” in felul urmator

$cache.shippingAddressList.on('change', { goToNext : false }, opc.checkout.accordionValidator);

Pana aici totul este ok, in e.data.goToNext primsc valoarea dorita iar codul functioneaza cum trebuie.

Problema apare cand am nevoie sa apelez functia nativ, nu in interiorul lui .on(), adica

opc.checkout.accordionValidator(e, false); (unde false ar trebui sa fie valoarea lui goToNext)

Cum as putea face update la codul respectiv astfel incat sa poata primi parametru si prin event.data cat si nativ, prin arguments

Multumesc

eu as modifica functia accordionValidator cat si cum este apelata in change event

 accordionValidator : function(e, data){
    e.preventDefault();

    /* your logic here */
 },

$cache.shippingAddressList.on('change', function (e) {
    opc.checkout.accordionValidator(e, {goToNext : false});
});

opc.checkout.accordionValidator(e, {goToNext : false});

Aka nu-ti cupla business-logic de un (calling-)API anume. Fa-l sa primeasca optiuni, apoi codul care cheama metoda se va ocupa de detaliile specifice.

1 Like