【问题标题】:How to put this Javascript function return in a HiddenField c# object?如何将此 Javascript 函数返回到 HiddenField c# 对象中?
【发布时间】:2014-12-23 23:39:47
【问题描述】:

我需要将函数 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);
                    }
                });
            }
        }

【问题讨论】:

  • 你不能从异步函数返回,除非你返回一个承诺。在成功处理程序中使用响应
  • 请@charlietfl 你能告诉我怎么做吗? 'hiddenBandeiraTemp.value = response.brand.name;'不工作。谢谢

标签: javascript c# asp.net hiddenfield


【解决方案1】:

您在success 回调中放置的return 语句将返回函数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);
                    }
                });
            }
        }

【讨论】:

  • 谢谢,但是'hiddenBandeiraTemp.value = response.brand.name;'不管用。 'alert(response.brand.name)' 有效,但是当我放入 var 或 hiddenBandeiraTemp.value 时,什么也没有发生。你还有什么建议吗?谢谢
  • hiddenCompradorIdTemphiddenBandeiraTemp 是两个不同的元素吗? Web 控制台中是否有任何错误?
  • 我忘了在var hiddenCompradorIdTemp = ...下面显示一行@它的var hiddenBandeiraTemp = document.getElementById('&lt;%=hiddenBandeira.ClientID%&gt;');
  • 好的,这可能是原因,因为我认为我的回答没有任何问题。检查这个:jsfiddle.net/4tj0atqg/1
【解决方案2】:

谢谢大家。 现在它工作正常。我没有将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) {
                    }
                });
            }
        }

【讨论】:

  • 你为什么在@nquocnghia 麻烦你之后发布这个答案
  • 对不起,只是为了补充。错误是函数validarCartao()之外的var hiddenBandeiraTemp = ...
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
相关资源
最近更新 更多