有一个文本框,我想只输入数字,输入第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>
答案 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