event 为空或不是对象

lc12d 2009-08-03 11:02:21
if(xmlHttp.responseText=="false")
{
document.getElementById("wrong1").innerHTML='<font color=red>验证码输入错误!</font>';
document.getElementById("verifycode").focus();
event.returnValue=false;
return false;
}

ajax判断验证码是否正确,不正确则显示验证码输入错误,并终止后台程序的运行,可是总说红色部分的event 为空或不是对象,哪位能给我解释解释event.returnValue=false 的应用吗?
...全文
369 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
手写 2009-08-03
  • 打赏
  • 举报
回复
妄想从ajax中的到返回是不切实际的想法.
唯有作为操作体才行

function checkvalidata()
{
createXMLHttpRequest();
var url= "validatacode.aspx?action=check&checkcode="+document.getElementById("verifycode").value;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=ShowResult;
xmlHttp.send(null);
var obj;//你要操作的对象
//回调方法
function ShowResult() //将此方法放到调用里面作为私有方法
{
if(xmlHttp.readyState==4)
{
if (xmlHttp.status == 200)
{
if(xmlHttp.responseText=="false")
{
//不可操作submit
}
else
{
obj.submit();
//可操作submit
document.getElementById("wrong1").innerHTML="";
return true;
}

}
else if (xmlHttp.status == 404)
{
alert("Request URL does not exist");
}
else if (xmlHttp.status == 403)
{
alert("Access or sql denied.");
}
else
{
alert("Error: status code is " + xmlHttp.status);
}


}

}


}


将<form onsubmit="XXXX"(去掉)>
改button onclick="checkvalidata()"
lc12d 2009-08-03
  • 打赏
  • 举报
回复
那个闭包我看不懂,能详细点给我整下不!
lc12d 2009-08-03
  • 打赏
  • 举报
回复
那该咋弄呢,帮我思考下吧,谢谢你
lc12d 2009-08-03
  • 打赏
  • 举报
回复
感觉不对,呵呵
手写 2009-08-03
  • 打赏
  • 举报
回复
return ShowResult();没有什么意义
然后判断checkvalidata(),不可能
手写 2009-08-03
  • 打赏
  • 举报
回复

function xxxx(){
var postFlag="POST";

var postBody=null;
postBody+="&pageStr="+encodeURI(xml);
var serverAddress =HW.substitute("pageModule",0);
var psNum=1;
var exh=new SuperHandler();
var callB={success:function (responseText, responseXML){
alert(responseText);

}, failure:function(status){}};//接收体
exh.request(postFlag, serverAddress,callB, psNum, postBody);
exh=null;
}

lc12d 2009-08-03
  • 打赏
  • 举报
回复
就是哎,对于ajax类包还是一片沙漠呢,谢谢你,慢慢学习中,我把代码改了下,你能帮我看看吧。
function checkvalidata()
{
createXMLHttpRequest();
var url= "validatacode.aspx?action=check&checkcode="+document.getElementById("verifycode").value;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=ShowResult;
xmlHttp.send(null);
return ShowResult();
}

//回调方法
function ShowResult()
{
if(xmlHttp.readyState==4)
{
if (xmlHttp.status == 200)
{
if(xmlHttp.responseText=="false")
{
return false;
}
else
{
document.getElementById("wrong1").innerHTML="";
return true;
}

}
else if (xmlHttp.status == 404)
{
alert("Request URL does not exist");
}
else if (xmlHttp.status == 403)
{
alert("Access or sql denied.");
}
else
{
alert("Error: status code is " + xmlHttp.status);
}


}

}

然后判断checkvalidata()是false还是true,这个可以这样弄吗?
手写 2009-08-03
  • 打赏
  • 举报
回复
长头发的,短头发的,都是中国人.
可能LZ还不怎么习惯用已经封装好的ajax类包.

// JavaScript Document
//EHM的ajax包,含有超类SuperHandler和继承于他的业务小雷
//zowell@EHM 20081230
/* AjaxHandler interface. 定义ajax接口 为以后的ajax工厂做尊备*/
/* SuperHandler class. ajax连接超类*/
var SuperHandler = function() {}; // implements AjaxHandler 实现AjaxHandler
SuperHandler.prototype = {
request: function(method, url, callback, action, postVars) {
var xhr = this.createXhrObject();
var da=(new Date()).getTime();
url=(url.indexOf("?")>=0)?(url+"&_data="+da):(url+"?_data="+da);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4){
(xhr.status == 200) ? callback.success(xhr.responseText, xhr.responseXML) : callback.failure(xhr.status);
}else{ return; }

};
xhr.open(method, url, true);
switch (action){//发送模式 0 简单提交 return string
case 0:{xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');break;}//发送模式 1 返回静态xml doc return xml
case 1:{xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');break;}//发送模式 1 获取静态doc return ??
case 2:{xhr.setRequestHeader("Content-Type","text/xml"); break;}//发送模式 2 获取静态doc return
case 3:{break;}//发送模式 2 获取静态doc return ??
default:{xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');break;}
}
if(method !== 'POST') postVars = '';
postVars=(postVars==null)?"":postVars;
xhr.send(postVars);
},
createXhrObject: function() { // Factory method.
if(window.XMLHttpRequest){var objXMLHttp = new XMLHttpRequest();}else{
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var n = 0;n < MSXML.length;n++){try{ var objXMLHttp = new ActiveXObject(MSXML[n]); break; }catch(e1){}} }
// If we reach this point, none of the methods worked.
if(objXMLHttp){

return objXMLHttp;
}else{
throw new Error('SuperHandler: Could not create an XHR object.');
}

}
};
lc12d 2009-08-03
  • 打赏
  • 举报
回复
闭包这个不太懂,呵呵
lc12d 2009-08-03
  • 打赏
  • 举报
回复
楼上的你的代码我有点不懂,我用的是JavaScript,和JScript有区别吧,
var callback={
s:function(){
evt.returnValue=false;
//在这里面调用evt就可以了
},//成功
f:function(){}//失败
};
/*
..相关ajax发送
*/

如何理解,谢谢你,学习中
手写 2009-08-03
  • 打赏
  • 举报
回复
闭包!闭包!

function checkvalidata(){
var evt=event;
var callback={
s:function(){
evt.returnValue=false;
//在这里面调用evt就可以了
},//成功
f:function(){}//失败
};
/*
..相关ajax发送
*/

}

其实你设计这样的方法意义不是特别大.因为用ajax做判断,是否返回是行不同的,因为ajax大的方法体是灭有返回的.并且他也是同步的.
lc12d 2009-08-03
  • 打赏
  • 举报
回复
哪位路过给看看啊,在线等呢
lc12d 2009-08-03
  • 打赏
  • 举报
回复
楼上的你是说把ajax作为一个函数,判断函数返回是false还是true?但是在ajax中返回的false 不作为函数的返回值啊

我的函数代码:function checkvalidata()
{
createXMLHttpRequest();
var url= "validatacode.aspx?action=check&checkcode="+document.getElementById("verifycode").value;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=ShowResult;
xmlHttp.send(null);

}

//回调方法
function ShowResult()
{
if(xmlHttp.readyState==4)
{
if (xmlHttp.status == 200)
{
if(xmlHttp.responseText=="false")
{
return false;
}
else
{
document.getElementById("wrong1").innerHTML="";
return true;


}

}
else if (xmlHttp.status == 404)
{
alert("Request URL does not exist");
}
else if (xmlHttp.status == 403)
{
alert("Access or sql denied.");
}
else
{
alert("Error: status code is " + xmlHttp.status);
}


}

}
手写 2009-08-03
  • 打赏
  • 举报
回复
event.returnValue = false;是终止当前事件的发生.
将验证方法写成闭包,event做为私有方法接收.
ajax验证做为内函数,这样event就存在于方法体内部了.
lc12d 2009-08-03
  • 打赏
  • 举报
回复
恩啊,反正就是不要执行Button的后台事件
hookee 2009-08-03
  • 打赏
  • 举报
回复
是指不递交表单?
lc12d 2009-08-03
  • 打赏
  • 举报
回复
那我要想实现这个效果该咋弄呢,楼上的给俺出出主意吧
hookee 2009-08-03
  • 打赏
  • 举报
回复
event是HTML DOM的事件对象,不是xmlhttp的事件对象,这段代码的执行并不是 DOM对象直接触发的,DOM事件未产生,所以得不到event
如果由DOM触发的事件,可用event.returnValue=false;取消对事件的默认处理行为.
lc12d 2009-08-03
  • 打赏
  • 举报
回复
走了一条弯路,到达终点原来这么难。谢谢,结贴
lc12d 2009-08-03
  • 打赏
  • 举报
回复
我的form中就没有onsubmit啊,还是不行

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧