问题描述:
我写了一个弹出层事件,用在TextBox中,只有3两种情况下,允许触发。
1,双击该输入框。IE和火狐的均已实现。
2,在输入框中按下回车,IE下已经实现,FF尚未实现。
3,在输入框中按下空格,IE下已经实现,FF尚未实现。2和3在FF中未实现的原因是,在IE中,event.screenX不仅能够获取鼠标点击时的坐标,还能获取“按下回车”时光标所在位置的坐标(不知道是不是这样。。我猜得 哈哈),所以无论是点击,还是输入回车和空格,都能计算出合适准确的坐标,来显示层。但是在FF中,经测试,点击时传入的event,是有event.screenX的,当然也有event.which。而按下回车或者空格时的event,却是只有event.which而没有event.screenX。请问这个问题怎么解决呢?
顺便问一个ajax的问题哈~代码如下
//发送请求
function xmlhttpPost(url, xml) {
xmlHttp = CreateXMLHttpRequest();
if (window.XMLHttpRequest) { //Mozilla、Netscape、Safari 火狐等浏览器
try {
xmlHttp.open("POST", url, true); //需要异步 并且open要小写 我日
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
} catch (e) {
alert("[系统提示]\n \n打开服务器出错!");
}
try {
xmlHttp.send(xml);
} catch (e) {
alert("[系统提示]\n \n发送到服务器数据出错!");
}
if (foxgetReturnXml != null) {
return foxgetReturnXml;
} else {
return null;
}
}
else if (window.ActiveXObject) { //各种版本的IE浏览器
try {
xmlHttp.Open("POST", url, false); //IE下可以同步
} catch (e) {
alert("[系统提示]\n \n打开服务器出错!");
}
try {
xmlHttp.Send(xml);
} catch (e) {
alert("[系统提示]\n \n发送到服务器数据出错!");
}
try {
var getReturnXml;
if (xmlHttp.readyState == 4) {
getReturnXml = xmlHttp.responseXML;
}
} catch (e) {
alert("[系统提示]\n \n从服务器返回数据出错!");
}
if (getReturnXml != null) {
return getReturnXml;
} else {
return null;
}
}
}//发送请求,获取数据
var foxgetReturnXml;
function handleStateChange() {
if (xmlHttp.readyState == 4) { //表示请求状态 4为完成
if (xmlHttp.status == 200) { //http状态指示码,200表示ok
//将服务器返回信息。
var result = xmlHttp.responseText;
foxgetReturnXml = xmlHttp.responseXML;
}
}
}//调用时
var URL = "../../Public/GetEntryDataByKeyName.aspx?Keyname=" + escape(type);
var strPostValues = xmlhttpPost(URL, null);这里遇到的问题是,火狐下异步时,执行完“xmlHttp.onreadystatechange = handleStateChange;”后,foxgetReturnXml的值第一次总是为空,第一次之后才正常。这个事件是双击触发的,这样就导致了,在FF下,第一次双击总是没任何反应。求解~~
我写了一个弹出层事件,用在TextBox中,只有3两种情况下,允许触发。
1,双击该输入框。IE和火狐的均已实现。
2,在输入框中按下回车,IE下已经实现,FF尚未实现。
3,在输入框中按下空格,IE下已经实现,FF尚未实现。2和3在FF中未实现的原因是,在IE中,event.screenX不仅能够获取鼠标点击时的坐标,还能获取“按下回车”时光标所在位置的坐标(不知道是不是这样。。我猜得 哈哈),所以无论是点击,还是输入回车和空格,都能计算出合适准确的坐标,来显示层。但是在FF中,经测试,点击时传入的event,是有event.screenX的,当然也有event.which。而按下回车或者空格时的event,却是只有event.which而没有event.screenX。请问这个问题怎么解决呢?
顺便问一个ajax的问题哈~代码如下
//发送请求
function xmlhttpPost(url, xml) {
xmlHttp = CreateXMLHttpRequest();
if (window.XMLHttpRequest) { //Mozilla、Netscape、Safari 火狐等浏览器
try {
xmlHttp.open("POST", url, true); //需要异步 并且open要小写 我日
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
} catch (e) {
alert("[系统提示]\n \n打开服务器出错!");
}
try {
xmlHttp.send(xml);
} catch (e) {
alert("[系统提示]\n \n发送到服务器数据出错!");
}
if (foxgetReturnXml != null) {
return foxgetReturnXml;
} else {
return null;
}
}
else if (window.ActiveXObject) { //各种版本的IE浏览器
try {
xmlHttp.Open("POST", url, false); //IE下可以同步
} catch (e) {
alert("[系统提示]\n \n打开服务器出错!");
}
try {
xmlHttp.Send(xml);
} catch (e) {
alert("[系统提示]\n \n发送到服务器数据出错!");
}
try {
var getReturnXml;
if (xmlHttp.readyState == 4) {
getReturnXml = xmlHttp.responseXML;
}
} catch (e) {
alert("[系统提示]\n \n从服务器返回数据出错!");
}
if (getReturnXml != null) {
return getReturnXml;
} else {
return null;
}
}
}//发送请求,获取数据
var foxgetReturnXml;
function handleStateChange() {
if (xmlHttp.readyState == 4) { //表示请求状态 4为完成
if (xmlHttp.status == 200) { //http状态指示码,200表示ok
//将服务器返回信息。
var result = xmlHttp.responseText;
foxgetReturnXml = xmlHttp.responseXML;
}
}
}//调用时
var URL = "../../Public/GetEntryDataByKeyName.aspx?Keyname=" + escape(type);
var strPostValues = xmlhttpPost(URL, null);这里遇到的问题是,火狐下异步时,执行完“xmlHttp.onreadystatechange = handleStateChange;”后,foxgetReturnXml的值第一次总是为空,第一次之后才正常。这个事件是双击触发的,这样就导致了,在FF下,第一次双击总是没任何反应。求解~~
{
var keynum=window.event?window.event.keyCode:evt.which;
if(keynum==13)
{
alert("按了回车");
}
}然后得到文本框的位置可以这样:
/**
* 坐标
* @param x
* @param y
* @return
*/
function CPos(x, y)
{
this.x = x;
this.y = y;
}
/**
* 得到对象的相对浏览器的坐标
* @param ATarget
* @return
*/
function GetObjPos(ATarget)
{
var target = ATarget;
var pos = new CPos(target.offsetLeft, target.offsetTop);
var target = target.offsetParent;
while (target)
{
pos.x += target.offsetLeft;
pos.y += target.offsetTop;
target = target.offsetParent
}
return pos;
} var pos = GetObjPos($("id"));
$("div").style.top=pos.y + eval($("id").offsetHeight)+"px";
$("div").style.left=pos.x + eval($("id").offsetWidth)+"px";这样就差不多了
试下
xmlHttp可不只是在xmlhttpPost()里调用,必须是全局~