Javascript Chrome警报框即使返回False也会提交页面

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

在我的应用程序中,我有一个文本框来搜索项目。在此文本框中,我希望用户在搜索之前必须输入至少2个字符。如果少于2个字符,我想显示一个简单的警告框,告诉用户至少输入2个字符。在我的文本框中,代码如下所示:

功能检查搜索栏(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,则表单提交事件将取消
  • 表单的原始表单提交事件代码由我们的自定义JavaScript预先挂起,如果表单提交需要取消,JavaScript将返回false。当页面的正文加载时,即正文的onload事件调用
    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