Javascript Chrome警报框即使返回False也会提交页面
在我的应用程序中,我有一个文本框来搜索项目。在此文本框中,我希望用户在搜索之前必须输入至少2个字符。如果少于2个字符,我想显示一个简单的警告框,告诉用户至少输入2个字符。在我的文本框中,代码如下所示:Javascript Chrome警报框即使返回False也会提交页面,javascript,jquery,html,asp.net,vb.net,Javascript,Jquery,Html,Asp.net,Vb.net,在我的应用程序中,我有一个文本框来搜索项目。在此文本框中,我希望用户在搜索之前必须输入至少2个字符。如果少于2个字符,我想显示一个简单的警告框,告诉用户至少输入2个字符。在我的文本框中,代码如下所示: 功能检查搜索栏(obj,默认输入按钮){ 如果(obj.value=='Search')obj.value=''; if(obj.value.length
功能检查搜索栏(obj,默认输入按钮){
如果(obj.value=='Search')obj.value='';
if(obj.value.length<2&&event.keyCode==13){
event.returnValue=false;
event.cancel=true;
警报(“请输入至少2个字符”);
//返回false;
obj.select();
obj.focus();
返回false;
}否则
doEnterKey(默认输入按钮);
}
函数doEnterKey(多个){
如果(event.keyCode==13){
event.returnValue=false;
event.cancel=true;
document.getElementById。单击();
}
}
处理此类问题的最佳方法是使用Jquery…只需几行Jquery代码就可以完成您在整个程序中所做的事情 在调用中传递事件对象,然后输入“阻止事件默认值”
我使用按键事件并在IE、FF和Chrome上进行了测试
现在,表单提交上的警告消息将不会出现,因为禁止输入
函数checkSearchLen(事件、对象、默认输入按钮){
event=event | | window.event;
如果(obj.value=='Search')obj.value='';
if(obj.value.length<2&&event.keyCode==13){
警报(“请输入至少2个字符”);
obj.select();
obj.focus();
event.preventDefault();
返回false;
}否则
doEnterKey(默认输入按钮);
}
函数doEnterKey(多个){
如果(event.keyCode==13){
event.returnValue=false;
event.cancel=true;
document.getElementById。单击();
}
}
另一个备选答案是签入表单提交事件,并根据无效输入取消该提交事件。这将防止页面发回。实际上,这与ASP.Net framework在打开客户端验证的情况下在页面中包含ASP.Net验证程序时所采用的方法相同 另外,没有必要取消
doEnterKey
中的事件,因此我在该函数中注释了两行
下面的代码将工作,因为我已经在我这边测试过了。使用的逻辑有两个方面:
stopSubmit
决定是否取消表单提交事件。如果此变量为true,则表单提交事件将取消setFormSubmit
修改现有表单提交代码时,就会发生这种情况。如果所有内容都有效,则执行原始表单提交代码时不会出现问题并返回页面
<body onload="setFormSubmit()">
<form id="form1" runat="server">
<asp:Label ID="label1" runat="server"></asp:Label>
<div>
First name:
<input type="text" name="FirstName" value="Mickey" /><br />
Last name:
<input type="text" name="LastName" value="Mouse" /><br />
<input type="submit" value="Submit" />
<input type="text" onkeydown="checkSearchLen(this,'MenuBar_imgSearchGo');" />
<input type="submit" value="Submit" id="MenuBar_imgSearchGo"/>
</div>
<script>
var stopSubmit = false;
function setFormSubmit() {
document.forms[0].setAttribute("onsubmit", " var stopPostback = StopPostback(); if(stopPostback === true) { return false; } " + (document.forms[0].onsubmit === null ? "" : document.forms[0].onsubmit));
}
function checkSearchLen(obj, defaultEnterButton) {
if (obj.value === 'Search') obj.value = '';
if (obj.value.length < 2 && event.keyCode == 13) {
event.returnValue = false;
event.cancel = true;
stopSubmit = true;
alert('Please ENter at Least 2 Characters');
obj.select();
obj.focus();
return false;
} else {
stopSubmit = false;
doEnterKey(defaultEnterButton);
}
}
function doEnterKey(s) {
if (event.keyCode == 13) {
//event.returnValue = false;
//event.cancel = true;
document.getElementById(s).click();
}
}
function StopPostback() {
if (stopSubmit === true) {
stopSubmit = false;
return true;
}
return false;
}
</script>
</form>
名字:
姓氏:
var stopSubmit=false;
函数setFormSubmit(){
document.forms[0].setAttribute(“onsubmit”,“var stoptostback=stoptostback();if(stoptostback==true){return false;}”+(document.forms[0].onsubmit==null?”:document.forms[0].onsubmit));
}
功能检查SearchLen(obj,默认输入按钮){
如果(obj.value=='Search')obj.value='';
if(obj.value.length<2&&event.keyCode==13){
event.returnValue=false;
event.cancel=true;
stopSubmit=true;
警报(“请输入至少2个字符”);
obj.select();
obj.focus();
返回false;
}否则{
stopSubmit=false;
doEnterKey(默认输入按钮);
}
}
函数doEnterKey(多个){
如果(event.keyCode==13){
//event.returnValue=false;
//event.cancel=true;
document.getElementById。单击();
}
}
函数StopPostback(){
如果(stopSubmit==真){
stopSubmit=false;
返回true;
}
返回false;
}
这不是同一件事吗?只是语法不同?或者你是说像jquery对话框?我认为jquery代码不太容易出错……我不是说像jquery对话框……jquery中的事件处理程序做得更好!您没有将事件传递给
doEnterKey
。并且在doEnterKey
中没有返回false。您应该显式地编写并返回false谢谢我现在就试试谢谢@gaemaf我想onkeypress正是我想要的