使用jQuery的validation后,无法引发asp.net按钮的事件处理程序

使用JQuery进行表单验证,aspx部分代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
<form id="InfoTableFrom" runat="server">
    
<div>
        
<table width="100%">
            
<tr>
                
<td>
<!--此部分程序生成-->
<div id="InfoTableDiv">
<div id="InfoTableHead">市场调研表</div>
<div id="InfoTableDescript">市场调查</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">对应市场</div>
<div id="InfoTableCtrlCol"><input name="a_Varchar_changc" type="text" id="a_Varchar_changc" maxlength="50" /><font color="red"><b>*</b></font></div>
</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">所在地区</div>
<div id="InfoTableCtrlCol"><input name="a_Varchar_diqu" type="text" id="a_Varchar_diqu" maxlength="50" /></div>
</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">全年销量</div>
<div id="InfoTableCtrlCol"><input name="a_int_xiaoliang" type="text" id="a_int_xiaoliang" style="width:50px;" /></div>
</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">市场份额</div>
<div id="InfoTableCtrlCol"><input name="a_float_fe" type="text" id="a_float_fe" style="width:50px;" /></div>
</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">当前等级</div>
</div>
<div id="InfoTableRow">
<div id="InfoTableTitleCol">22</div>
<div id="InfoTableCtrlCol"><input name="a_Varchar_222" type="text" id="a_Varchar_222" maxlength="50" style="width:22px;" />
<div class="lblDescript">222</div></div>
</div>
</div>
<script type="text/javascript">
$(
function(){
$.validator.setDefaults({
   submitHandler: 
function(form) { form.submit(); }
});
jQuery.validator.addMethod(
"isInt"function(value, element) { 
     
return this.optional(element) || /^\d*$/.test(value); 
}, 
" 数据类型不正确,只能填写整数");
jQuery.validator.addMethod(
"isFloat"function(value, element) { 
     
return this.optional(element) || /^\d+\.\d{0,7}$/.test(value); 
}, 
" 数据类型不正确,必须填写小数格式如:1.0");
$(InfoTableFrom).validate({
rules:{
   
"a_Varchar_changc" : { required: true}
,   
"a_int_xiaoliang" : {isInt : true}
,   
"a_float_fe" : {isFloat : true}

},
messages:{
    
"a_Varchar_changc" : { required: " 请填写市场"}
}
});
});
</script>
<!--程序生成代码结束-->
                
</td>
            
</tr>
            
<tr>
                
<td align="center">
                
<asp:Button ID="btnOK" runat="server" onclick="btnOK_Click" Text=" 确定 " />
                
&nbsp;&nbsp;
                    
<input id="Button1" type="button" onclick="javascript:self.close()" value=" 关闭 " /></td>
            
</tr>
        
</table>
    
</div>
    
</form>

以上代码运行后,当我们点击“确定”按钮,页面发生PostBack,但是并没有引发“确定”按钮的事件处理程序。我去掉上面的JQuery的代码,事件就可以引发。
经过分析得出原因:
JQuery的Form Validate plugin,在实际提交时并不提交Input type为button的值,所以asp.net无法定位事件处理程序。

解决办法很简单,就是在Form里再放一个hidden input
<input type="hidden" name="btnOK" value=" 确定 " />
注意这个name一定要跟要引发事件的按钮的最终客户端name相同。
再点“确定”程序可以按预期的正常运行。

转载于:https://www.cnblogs.com/baoposhou/archive/2008/12/11/1352575.html

猜你喜欢

转载自blog.csdn.net/weixin_33912453/article/details/93320753