0

我需要将函数的返回validarCartao()值放入该 HiddenField 值中。工作正常,alert(response.brand.name)但我无法得到这个,即使我将 HiddenField 移动到函数内部。我尝试了很多方法,但没有任何效果。我非常感谢您能提供的任何帮助。谢谢。

var hiddenBandeiraTemp = document.getElementById('<%=hiddenBandeira.ClientID%>');

hiddenBandeiraTemp.value = validarCartao(tbNumeroCartao.value);

function validarCartao(element) {

            var cardNum = element.replace(/[^\d.]/g, '');
            var card_invalid = 'Número do cartão inválido.';

            if (cardNum.length >= 6) {
                PagSeguroDirectPayment.getBrand({
                    cardBin: cardNum.substr(0, 6),
                    success: function (response) {
                        if (typeof response.brand.name != 'undefined') {
                            alert(response.brand.name); // OK
                            return response.brand.name; // <<--
                        } else {
                            alert(card_invalid);
                        }
                    },
                    error: function (response) {
                        alert(card_invalid);
                    }
                });
            }
        }

4

2 回答 2

2

return您放在回调中的语句success将返回函数的值而success()不是函数的值validarCartao()

success: function (response) {
    if (typeof response.brand.name != 'undefined') {
        alert(response.brand.name); // OK
        return response.brand.name; // <<--
    } else {
        alert(card_invalid);
    }
}

此外,由于该函数PagSeguroDirectPayment.getBrand()似乎是异步的,因此不可能在内部返回其值validarCartao()。在我看来,这将是一个更好的解决方案:

var hiddenCompradorIdTemp = document.getElementById('<%=hiddenCompradorId.ClientID%>');

validarCartao(tbNumeroCartao.value);

function validarCartao(element) {

            var cardNum = element.replace(/[^\d.]/g, '');
            var card_invalid = 'Número do cartão inválido.';

            if (cardNum.length >= 6) {
                PagSeguroDirectPayment.getBrand({
                    cardBin: cardNum.substr(0, 6),
                    success: function (response) {
                        if (typeof response.brand.name != 'undefined') {
                            alert(response.brand.name); // OK
                            hiddenBandeiraTemp.value = response.brand.name;
                        } else {
                            alert(card_invalid);
                        }
                    },
                    error: function (response) {
                        alert(card_invalid);
                    }
                });
            }
        }
于 2014-12-24T00:16:41.510 回答
0

谢谢你们。现在它工作正常。我没有将hiddenBandeiraTemp声明放入validarCartao(element). 圣诞快乐!!

function validarCartao(element) {

            var hiddenBandeiraTemp = document.getElementById('<%=hiddenBandeira.ClientID%>');

            var cardNum = element.replace(/[^\d.]/g, '');
            var card_invalid = 'Número do cartão inválido.';

            if (cardNum.length >= 6) {
                PagSeguroDirectPayment.getBrand({
                    cardBin: cardNum.substr(0, 6),
                    success: function (response) {
                        if (typeof response.brand.name != 'undefined') {
                            hiddenBandeiraTemp.value = response.brand.name.toString();
                        } else {
                            alert(card_invalid);
                        }
                    },
                    error: function (response) {
                        alert(card_invalid);
                    },
                    complete: function (response) {
                    }
                });
            }
        }

于 2014-12-24T14:41:23.503 回答