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 に答える