如何从onchange事件中调用javascript中的两个函数

时间:2014-07-11 08:23:21

标签: c# javascript jquery asp.net

有一个文本框,我想只输入数字,输入第6个数字,我想通过点击客户端隐藏按钮的onclick事件(服务器端)来调用代码隐藏方法,我想在其中进行一些操作。< / p>

我面临的问题是,当我在文本框中输入任何数字时运行下面的代码示例时,只调用第一个方法AllowNumericOnly()而不是第二个方法调用callMethod(),即使在第一个方法返回true之后也是如此值。

为什么,我无法理解?

    <script type="text/javascript">

function callMethod()
{
    alert('1');
    var PinCodeValue=document.getElementById('txtTest').value;
    var Pincodelength = PinCodeValue.length;
    if(Pincodelength>4)
    {
        alert('Pincodelength>4');
        document.getElementById('Button1').click(); 
        return true;                      
    }
    return false;
}       

function AllowNumericOnly(e, t) {
    try {
        if (window.event) {
            var charCode = window.event.keyCode;
        }
        else if (e) {
            var charCode = e.which;
        }
        else { return true; }
        if ((charCode > 47 && charCode < 58) || charCode == 8 || charCode == 0)
        {
        alert('true');
            return true;
            }
        else
        {
        alert('false');
            return false;
            }
    }
    catch (err) {
        alert(err.Description);
    }
}
</script>


<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtTest" runat="server" MaxLength="7" onkeypress="return       AllowNumericOnly(event,this); callMethod();" AutoPostBack="true"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" Style="display: none"     OnClientClick="alert1();"
            OnClick="Button1_Click" />
    </div>
    </form>
</body>

3 个答案:

答案 0 :(得分:1)

最好的方法是创建一个可以调用这两个函数的小函数,因为它可以改善代码分离。

function doBoth(e, t) {
   var result = AllowNumericOnly(e, t)
   callMethod()
   return result;
}

然后您的ASP代码将会读取

<asp:TextBox ID="txtTest" runat="server" MaxLength="7" onkeypress="return doBoth(event, this);" AutoPostBack="true"></asp:TextBox>

或者另一种方法是在jQuery中添加多个处理程序,同样可以在单个函数中完成,但这只是为了说明。在你的情况下,它会使你的返回值更难

$("#txtTest").keypress(function() { AllowNumericOnly(); })
$("#txtTest").keypress(function() { callMethod(); })

答案 1 :(得分:0)

onkeypress =“if(AllowNumericOnly(event,this))返回callMethod();否则返回false;”

答案 2 :(得分:0)

您可以使用jquery并将两个事件处理程序绑定到一个元素(按钮)...

$( "#Button1" ).bind( "click", function() {
    alert( "User clicked on 'foo.'" );
});

$( "#Button1" ).bind( "click", function() {
    alert( "User really clicked on 'foo.'" );
});

在上面的情况下,两个处理程序都工作,jQuery以这种方式允许多个...只是按照它们被绑定的顺序意识到火。见this link for more info