0

Can someone help with the following code? It seems like it is not correct.

How do I return the boolean value from the callback, and check whether it is ok to continue or not.

It seems to me the boolean value is always true, and false is never returned.

Also please describe how the code works to me after you correct it. Thank you.

$("#divContent").on('blur', "input[id^='cak4premium0']", function () {
    var selectedPayoutFreq = $('input[name=SelectedPayoutFrequency]:checked').val();

    if (typeof selectedPayoutFreq === "undefined") {
        alert("Please select Payout Frequency");
        return;
    }

    var selectedValue = $(this).val();

    if (selectedValue = '') {
        alert("Please enter Premium");
        return;
    }

    var premiumValid = checkPremiumAmount();

    if (premiumValid) {
        var url = "/Annuity/Home/CalculateAnnuityPayout";
        var data = GetAnnuityMainPlan();
        data.SelectedPayoutFrequency = selectedPayoutFreq;
        $.post(url, data, DisplayCountAnnuity);
    }

});

function checkPremiumAmount() {
    var url = "/Annuity/Home/GetAnnuityMinMaxPremium";
    var data = GetAnnuityMainPlan();
    var currentPlan = $('.selectPlan').val();
    var retValue = true;
    $.post(url, data, null).done(function (data) {
        minPremium = data.MinPremium;
        maxPremium = data.MaxPremium;
        var premium = data.Premium;
        if (premium < minPremium) {
            if (currentPlan == 'CAK4') {
                alert("The minimum Premium is $" + minPremium);
                $("input[id^='cak4premium0']").val(minPremium);
                retValue = false;
            }
            else if (currentPlan == 'GAK4') {
                alert("For single premium less than " + minPremium + ", annuity installment will be paid yearly.");
                $("input[id^='cak4premium0']").val(minPremium);
                retValue = false;
            }
        }


        if (premium > maxPremium) {
            alert("The maximum Premium is " + maxPremium);
            $("input[id^='cak4premium0']").val(maxPremium);
            retValue = false;
        }

        return retValue;
    });

}
bcr
  • 1,983
  • 27
  • 30
Insan
  • 77
  • 8

1 Answers1

1

jquery - return value from callback function (in post request) into the function its inside of?

Unless you make a synchronous AJAX call (which you probably don't want to do), you simply can't.

If this function is used in several places in your code, your best bet may be to allow it to receive a function.

That way instead of relying on the result being returned from your function to be used in some code, you're actually passing your code directly in, so it is ensured to be able to use the response.

var my_form = $('#my_form');

my_form.submit( valid_pass_sett );

function valid_pass_sett() {
    //code to remove errors left over from previous submissions - snipped
    pass_old = $('input[name=pass_old]').val();
    pass_new = $('input[name=pass_new]').val();
    pass_confirm_new = $('input[name=pass_confirm_new]').val();

    validate('password', pass_new, pswd_validation_callback); // async validation

    return false;  // cancel form submission
}

function validate(request_type, request_text, callback ) {
    $.post("http://www.example.com/ajax/validate.php",{
        type: request_type, 
        text: request_text
    }, callback );
}

function pswd_validation_callback( data ) {
    if ( data === 'valid' ) {
         // if valid, call the native .submit() instead of the jQuery one
        my_form[ 0 ].submit();
    } else {
         // Otherwise do your thing for invalid passwords.
         // The form has already been canceled, so no concerns there.
        $('#pass_new').addClass('error');
        $('#pass_confirm_new').addClass('error');
        $(error_string.format('Please enter a valid password.')).insertAfter('#pass_confirm_new');
        $('#pass_text_short').hide();
        $('#pass_text_long').show();
    }
}
Community
  • 1
  • 1