2010-10-14 86 views
0

我有一些简单的表单验证正在进行,它可以在FF和IE中运行。简而言之,如果表单上的日期超出范围,那么JavaScript会阻止表单提交。但是,在Chrome中,它完全被破坏了。当preventDefault触发时,Chrome会将用户从应用程序中注销,然后他们被踢回索引/登录页面。我不知道为什么。Chrome浏览器在用户弹出警告框后尝试阻止JavaScript默认值时弹出Chrome浏览器

我使用的代码是在这里:

function cancelEvent (e) { 
    if (e.preventDefault) { 
    e.preventDefault(); 
    } else { 
    e.returnValue = false; 
    } 
} 

它是由

function validateFields(evt) { 
    evt = evt ? evt : window.event; 

    var invalid = false; 

    //validation #1: Consent Date should NOT be in the future 
    var today = new Date(); 
    var consentDate = document.forms["ptform"].elements["calConsent"].value; 
    var consDate=convertDate(consentDate); 

    if(consDate>today){ 
    invalid=true; 
    var consentDateTitle=document.getElementById("consentDateTitle"); 
    consentDateTitle.className = consentDateTitle.className + " errormessage"; 
    alert("Consent Date cannot be in the future"); 
    } 
    //end validation #1 

    if (invalid) { 
    cancelEvent(evt); 
    } 
} 

美联储和这几乎是它。在FF和IE中运行良好,但Chrome很不爽。任何想法为什么?我不是一个js专家... :(

我的事件处理程序代码:

// listen to an event 
function listenEvent(eventObj, event, eventHandler) { 
    if (eventObj.addEventListener) { 
    eventObj.addEventListener(event, eventHandler,false); 
    } else if (eventObj.attachEvent) { 
    event = "on" + event; 
    eventObj.attachEvent(event, eventHandler); 
    } else { 
    eventObj["on" + event] = eventHandler; 
    } 
} 
+0

任何错误? ?ctrl shift I和'Console' – 2010-10-14 18:29:27

+0

另外,你可以发布完整页面吗? – 2010-10-14 18:31:11

+0

控制台没有错误,不能真正发布完整的页面... id必须做一个模型,我猜。 ..在ff/ie中很好,但这个奇怪的事情发生在铬... – cephyn 2010-10-14 22:07:20

回答

0

我可以在Chrome JS控制台漂亮的你的代码有点

function validateFields(evt) { 
    evt = evt || window.event; 

    var invalid; //Null qualifies as false too 

    //validation #1: Consent Date should NOT be in the future 
    var today = new Date(); 
    var consentDate = document.forms["ptform"].elements["calConsent"].value; 
    var consDate=convertDate(consentDate); 

    if(consDate>today){ 
    invalid=true; 
    var consentDateTitle=document.getElementById("consentDateTitle"); 
    consentDateTitle.className += " errormessage"; 
    alert("Consent Date cannot be in the future"); 
    return false; //Prevents bubbling and default behavior 
    } 
    //end validation #1 

} 
+0

嗯。也许我正在实现那个错误,但是在IE中起作用,允许在ff中进行不正确的提交,并且警报仍然会以chrome引发用户。 :( – cephyn 2010-10-15 16:52:53

+0

这是关于警报的事情,任何触发的警报都会将用户踢出去,验证码我有效 - 它只是在警告框中断开了,但我有点困惑,但是生病了,必须做更多的调试...... – cephyn 2010-10-15 16:59:31

+0

我有一种感觉,这种警告可能是奇怪的行为,记住警告暂停所有的JS执行,创建一个小小的弹出框可能是值得的,这样可以在不停止应用程序的情况下将消息传递给用户。 – Drew 2010-10-15 21:33:25

相关问题