当用户试图在弹出警报后使用javascript阻止默认值时,Chrome会将用户踢出表单

当用户试图在弹出警报后使用javascript阻止默认值时,Chrome会将用户踢出表单,javascript,google-chrome,Javascript,Google Chrome,我正在进行一些简单的表单验证,它在FF和IE中工作。简单地说,如果表单上的日期超出范围,javascript将阻止表单提交。然而,在Chrome中,它完全被破坏了。当preventDefault启动时,Chrome会将用户从应用程序中注销,并返回到索引/登录页面。我不知道为什么 我使用的代码如下: function cancelEvent (e) { if (e.preventDefault) { e.preventDefault(); } else { e.return

我正在进行一些简单的表单验证,它在FF和IE中工作。简单地说,如果表单上的日期超出范围,javascript将阻止表单提交。然而,在Chrome中,它完全被破坏了。当preventDefault启动时,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;
  }
}

我能把你的代码修改一下吗

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

}

Chrome JS控制台中有错误吗?ctrl shift I和“控制台”也有,你能发布整个页面吗?控制台中没有错误。不能真正发布整个页面…我想我必须制作一个模型。这很奇怪,因为…在ff/ie中很好,但这种奇怪的事情发生在Chrome中…好吧,它在表单提交中通常做了奇怪的事情。只有在Chrome.s中eems cancelEvent函数不是问题所在,di不确定它在哪里。我需要做更多的调试。谢谢你的回答。我会深入挖掘。好的。我有选择地逐行进行。在我放入警报框之前,这两个函数中的所有功能都可以正常工作。一旦我放入警报框,chrome就会崩溃。有什么线索说明为什么会这样吗d be?我的事件处理程序代码是否以某种方式误解了在警报框上单击“确定”的意思?嗯。也许我实现了错误,但这在IE中有效,允许在ff中不正确地提交,并且警报仍然会在chrome中抛出用户:(这与警报有关。任何触发的警报都会将用户踢出。我拥有的验证代码有效-它只是在警报框上中断。我有点困惑,但我必须做更多的调试…我感觉警报可能是奇怪的行为。记住警报会停止所有JS执行。创建一个小弹出窗口可能是值得的。)x、 这样,您就可以在不停止应用程序的情况下将消息传回给用户。