关于javascript的一些小问题

mylibin 2008-05-24 10:01:19

<script>
var array = new Array("北京","天津","上海","重庆","河北","河南","湖北","湖南","江苏","山西","陕西","甘肃","四川");
var div;
function ShowDiv()
{

if(div==null)
{
div = document.createElement("div");
div.id = "div1";
div.style.left = document.body.scrollLeft+ event.clientX-event.offsetX;
div.style.top = document.body.scrollTop+event.clientY-event.offsetY-18;
div.position = "absolute";
div.style.width="200px";
div.style.Height="100px";
div.style.background="#cccccc";
div.style.borderLeft="1px solid black";
div.style.borderTop="1px solid black";
div.style.borderBottom="1px solid black";
div.style.borderRight="1px solid black";
div.style.fontSize="11px";
for(i =0 ; i < array.length;i++)
{
div.innerHTML += "<a style='cursor:hand' onclick='getvalue(this.innerHTML)'>"+array[i]+"</a>";
}
document.body.appendChild(div);
}
else
{
document.getElementById("div1").style.display='';
}
}

function getvalue(val)
{
document.getElementById("Text1").value=val;

document.getElementById("div1").style.display='none';
}
function HiddenDiv()
{

document.getElementById("div1").style.display='none';
}
</script>
</head>
<body>
<form id="form1" runat="server">
<p />
     <input id="Text1" type="text" value="选择省" onblur="if (this.value=='') this.value=this.defaultValue;HiddenDiv()" onfocus="if (this.value==this.defaultValue) this.value='';ShowDiv();event.cancelBubble=true;return false" />
</form>
</body>
</html>


1、大家帮我看看为什么我加了if判断后点击a标签没调用函数
2、用event如何控制显示的位置 不太会用它 想让他显示在文本框的下面 左面和文本框一样对齐 但是总搞不定
3、event.cancelBubble=true;return false 这个有什么用 看了书后也没感觉到什么 它有什么作用吗
...全文
137 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
taike2000 2008-05-24
  • 打赏
  • 举报
回复
1、大家帮我看看为什么我加了if判断后点击a标签没调用函数?

回答:是由于事件处理的先后顺序的原因:当你点击a标签,首先执行的是Text1的onblur,则div1隐藏,又何来点击a标签调用函数。

2、用event如何控制显示的位置 不太会用它 想让他显示在文本框的下面 左面和文本框一样对齐 但是总搞不定?

回答:直接使用css,直接固定到text下面就可以了

3、event.cancelBubble=true;return false 这个有什么用 看了书后也没感觉到什么 它有什么作用吗?

回答:事件有两种:
冒泡型事件:事件自底而上触发 (IE为此类)
捕获型事件 :事件自上而下触发。
event.cancelBubble=true取消事件冒泡,取消后他的父节点不会触发此节点引发的事件。

mylibin 2008-05-24
  • 打赏
  • 举报
回复
怎么没人啊
mylibin 2008-05-24
  • 打赏
  • 举报
回复
怎么没人来啊
是不是嫌分少啊 少的话可以加
mylibin 2008-05-24
  • 打赏
  • 举报
回复
第一次点击的时候 不动态创建了吗
cylot 2008-05-24
  • 打赏
  • 举报
回复
1.加了if判断后点击a标签没调用函数
if(div==null)你的div在哪?
cylot 2008-05-24
  • 打赏
  • 举报
回复
3、event.cancelBubble=true取消事件冒泡,在 IE 的事件机制中,触发事件会从子元素向父元素逐级上传,就是说,如果子元素触发了单击事件,那么也会触发父元素的单击事件;event.cancelBubble=true;可以停止事件继续上传补充一点,Ie的事件传递是从下到上的:

事件来源对象->上级对象->上上级对象->.....->body->document->window

NS的事件传递是从上到下:

window->document->body->....->事件来源对象实例源码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>event.cancelBubble</title>
<style>
<!--
* {font:menu}
-->
</style>
</head>

<body>
<span onclick=alert("你好")>点我 <span>再点我</span></span><br><br>

<span onclick=alert("你好")>点我 <span onclick=event.cancelBubble=true;>再点我</span></span>
</body>

</html>
mylibin 2008-05-24
  • 打赏
  • 举报
回复
3q iloveC#
Go 旅城通票 2008-05-24
  • 打赏
  • 举报
回复
<html>
<head><script>
var array = new Array("北京","天津","上海","重庆","河北","河南","湖北","湖南","江苏","山西","陕西","甘肃","四川");
var div;
function ShowDiv(txt)
{

if(div==null)
{
div = document.createElement("div");
div.id = "div1";

div.style.position = "absolute";//============少了style
div.style.width="200px";
div.style.Height="100px";
div.style.background="#cccccc";
div.style.borderLeft="1px solid black";
div.style.borderTop="1px solid black";
div.style.borderBottom="1px solid black";
div.style.borderRight="1px solid black";
div.style.fontSize="11px";
//===================
var pos=GetPos(txt);
div.style.left =pos.x;
div.style.top = pos.y;
for(i =0 ; i < array.length;i++)
{
div.innerHTML += "<a style='cursor:hand' onclick='getvalue(this.innerHTML)'>"+array[i]+"</a>";
}
document.body.appendChild(div);
}
else
{
document.getElementById("div1").style.display='';
}
}
function GetPos(txt)
{
var pos=new Object();
pos.x=txt.offsetLeft;
pos.y=txt.offsetTop+txt.offsetHeight;
while(txt=txt.offsetParent)
{
pos.x+=txt.offsetLeft;
pos.y+=txt.offsetTop;
}
return pos;
}
function getvalue(val)
{
document.getElementById("Text1").value=val;
HiddenDiv()
}
function HiddenDiv()
{

document.getElementById("div1").style.display='none';
}
document.onclick=function(e)
{
e=e||event;
var tag=e.srcElement||e.target;
if(tag.id!="Text1")
HiddenDiv();
}
</script>
</head>
<body>
<form id="form1" runat="server">
<p />
     <input id="Text1" type="text" value="选择省" onclick="ShowDiv(this);" />
</form>
</body>
</html>
mylibin 2008-05-24
  • 打赏
  • 举报
回复
现在是在动态创建div的时候给它绝对定位感觉没什么效果
如果不是动态创建的话可以把div用css定在文本框的下面 并且和文本框对齐
但是动态创建的话不起作用了 不知道该怎么定位

这个是关键问题
mylibin 2008-05-24
  • 打赏
  • 举报
回复
谢谢各位 知道问题了
现在是在动态创建div的时候给它绝对定位感觉没什么效果
如果不是动态创建的话可以把div用css定在文本框的下面 并且和文本框对齐
但是动态创建的话不起作用了 不知道该怎么定位
各位帮帮忙
如果在div.innerHTML += "<a style='cursor:hand' onclick='getvalue()'>"+array[i]+"</a>";


function getvalue()
{
alert(this.innerHTML);
}
怎么不行 直接在a标签里这样可以 this不是指调用的对象吗


解决这个立马给分 谢谢!!!
DshirenJ 2008-05-24
  • 打赏
  • 举报
回复
帮顶
job_2006 2008-05-24
  • 打赏
  • 举报
回复
关注中
wangkun9999 2008-05-24
  • 打赏
  • 举报
回复
1、大家帮我看看为什么我加了if判断后点击a标签没调用函数
调用函数之前先执行了onBlur事件.
wangkun9999 2008-05-24
  • 打赏
  • 举报
回复
1.

<input id="Text1" type="text" value="选择省" onFocus="if (this.value==this.defaultValue) this.value='';ShowDiv();event.cancelBubble=true;return false" />
mylibin 2008-05-24
  • 打赏
  • 举报
回复
6楼说点击a标签的时候首先执行的是Text1的onblur事件
不是应该直接执行a标签的onclick事件吗
怎么还会执行onblur事件呢

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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