我的JavaScript出现问题。这似乎很奇怪。这是怎么回事。我有一个表单,在用户提交表单后,它将调用一个函数(onsubmit事件)以验证提交的数据,如果出现问题,或者如果用户名/电子邮件已经存在于数据库中(此部分使用ajax),它将返回false并使用DOM显示错误。这是下面的代码。奇怪的是,它仅在我使用空的alert(’‘)消息时才起作用,没有它,它将不起作用。谢谢您的帮助。
//////////////////////////////////////
function httpRequest() {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert("Your browser does not support XMLHTTP!");
}
return xmlhttp;
}
function validateRegForm(reg) {
var isValidForm = true;
var warningIcon = "";//for later in case we want to use an icon next to warning msg
with(reg) {
var regFormDiv = document.getElementById("registration_form");
//Check if dynamic div exist, if so, remove it
if(document.getElementById('disp_errors') != null) {
var dispErrorsDiv = document.getElementById('disp_errors');
document.getElementById('reg_form').removeChild(dispErrorsDiv);
}
//Dynamically create new 'div'
var errorDiv = document.createElement('div');
errorDiv.setAttribute('id','disp_errors');
errorDiv.setAttribute('style','background-color:pink;border:1px solid red;color:red;padding:10px;');
document.getElementById('reg_form').insertBefore(errorDiv,regFormDiv);
var xmlhttp = httpRequest();
var available = new Array();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4)
{
var response = xmlhttp.responseText;
if(response != "") {
//Return values
var newValue = response.split("|");
available[0] = newValue[0];
available[1] = newValue[1];
}
}
}
xmlhttp.open("GET","profile_fetch_reg_info.php?do=available&un="+u_username.value+"&email="+u_email.value+"",true);
xmlhttp.send(null);
alert(' '); ////////////WITHOUT THIS, IT DOESN'T WORK. Why?
if(available[1] == "taken") {
errorDiv.innerHTML += warningIcon+'Username is already taken!<br />';
isValidForm = false;
} else if(u_username.value.length < 4){
errorDiv.innerHTML += warningIcon+'Username must be more than 4 characters long!<br />';
isValidForm = false;
} else if(u_username.value.length > 35) {
errorDiv.innerHTML += warningIcon+'Username must be less than 34 characters long!<br />';
isValidForm = false;
}
if(available[0] == "taken") {
errorDiv.innerHTML += warningIcon+'Email address entered is already in use!<br />';
isValidForm = false;
} else if(u_email.value == ""){
errorDiv.innerHTML += warningIcon+'Email address is required!<br />';
isValidForm = false;
} else {
//Determine if email entered is valid
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!filter.test(u_email.value)) {
errorDiv.innerHTML += warningIcon+'Email entered is invalid!<br />';
u_email.value = "";
isValidForm = false;
}
}
if(u_fname.value == ""){
errorDiv.innerHTML = warningIcon+'Your first name is required!<br />';
isValidForm = false;
}
if(u_lname.value == ""){
errorDiv.innerHTML += warningIcon+'Your last name is required!<br />';
isValidForm = false;
}
if(u_password.value.length < 4){
errorDiv.innerHTML += warningIcon+'Password must be more than 4 characters long!<br />';
isValidForm = false;
} else if(u_password.value.length > 35) {
errorDiv.innerHTML += warningIcon+'Password must be less than 34 characters long!<br />';
isValidForm = false;
} else if (u_password.value != u_password2.value) {
errorDiv.innerHTML += warningIcon+'Password and re-typed password don\'t match!<br />';
isValidForm = false;
}
if(u_squestion.value == ""){
errorDiv.innerHTML += warningIcon+'A security question is required!<br />';
isValidForm = false;
}
if(u_sanswer.value == ""){
errorDiv.innerHTML += warningIcon+'A security answer is required!<br />';
isValidForm = false;
}
if(u_address.value == ""){
errorDiv.innerHTML += warningIcon+'Address is required!<br />';
isValidForm = false;
}
if(u_city.value == ""){
errorDiv.innerHTML += warningIcon+'City is required!<br />';
isValidForm = false;
}
if(u_state.value == ""){
errorDiv.innerHTML += warningIcon+'State is required!<br />';
isValidForm = false;
}
if(u_zip.value == ""){
errorDiv.innerHTML += warningIcon+'Zip code is required!<br />';
isValidForm = false;
}
if(u_phone.value == ""){
errorDiv.innerHTML += warningIcon+'Phone number is required!<br />';
isValidForm = false;
}
if(isValidForm == false)
window.scroll(0,0);
return isValidForm;
}
}
这有alert()
帮助,因为这会延迟该函数中其余javascript的处理(从alert()
下到下的所有操作),从而为AJAX请求留下足够的时间来完成。AJAX中的第一个字母代表“异步”,这意味着(默认情况下)响应将在“将来的某个时候”出现,但不是立即出现。
一个补丁修复(你应该 不
执行)是使处理同步(通过改变第三个参数open()
是false
),将停止脚本(以及整个网页)的进一步处理,直至请求返回。这很不好,因为它将有效地冻结Web浏览器,直到请求完成。
正确的解决方法是重新组织代码,以便依赖AJAX请求结果的所有处理都可以进入该onreadystatechange
函数,并且不能在启动AJAX请求的主函数中进行。
通常处理此方法的方法是修改您的DOM(在发送AJAX请求之前)以使表单变为只读状态并显示某种“处理中”消息,然后,如果一切正常,则在AJAX响应处理程序中(服务器正确响应)
并且 验证成功)submit()
在表格上调用,否则使表格再次变为可写状态并显示任何验证错误。
本文向大家介绍JavaScript alert()的用法,包括了JavaScript alert()的用法的使用技巧和注意事项,需要的朋友参考一下 示例 对象的alert()方法window显示一个带有指定消息和或按钮的警报框。该按钮的文本取决于浏览器,无法修改。OKCancel 语法 产生 一个警告框经常使用,如果你想确保信息都通过给用户。 注意:警报框将焦点从当前窗口移开,并强制浏览器阅读消息
问题内容: 有没有人有过重写JavaScript函数的经验? 哪些浏览器支持此功能? 哪些浏览器版本支持此功能? 覆盖该功能有哪些危险? 问题答案: 绝对是“受支持的”。这是您的网页,您可以使用它进行任何操作。 我已经这样做了,可以在不修改库的情况下而是通过潜入事件来跟踪分析事件。 使用代理模式: 如果需要,您也可以绕过对原始函数的调用(代理)
我正在从一个overpass调用中检索OSM Json,以获取必须保存在数据库中的功能列表。由于数据彼此非常不同(例如,其中一些确实有一个名为“addr:city”的标记,而有些则没有),因此我想检查是否存在密钥,并且仅在这种情况下保存相应的值。我只发现了这个问题,但这不是我的情况,因为我不知道一个元素会有哪些键,哪些键不会,而且因为我正在处理大量的数据,我真的无法逐个检查元素,当然也无法为每种情
问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一
问题内容: 我正在创建一个简单的ajax调用,该调用检索指定url的内容并将其写入页面。我遇到的问题是它用此信息替换了整个体内的内容 这是JS: 这是HTML: 使用萤火虫进行检查,我看不到test.html页之前和之后的内容。如果我删除ajax调用,只执行3,则之前的文本和之后的文本将正确显示。jQuery不是一个选择,我必须在没有大型库帮助的情况下执行此操作,因为大小和速度至关重要。 问题答案
本文向大家介绍javascript 中的console.log和弹出窗口alert,包括了javascript 中的console.log和弹出窗口alert的使用技巧和注意事项,需要的朋友参考一下 主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。 相比alert他的优点是: 1.他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是