有关仿人人回复框的写法 想写一个仿人人的回复框,可以点击一下弹开,然后点击文本框以外的地方,文本框可以收起,请问该如何实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <a href="#" onclick="return showReply(event)">回复</a><div id="dvReply" style="display:none"><textarea></textarea><br /><input type="button" value="回复" /></div> <script type="text/javascript"> function showReply(e) { var dv = document.getElementById('dvReply'); dv.style.display = dv.style.display == 'none' ? 'block' : 'none'; if (e.stopPropagation) e.stopPropagation(); e.cancelBubble = true; return false; } document.onclick = function (e) { e = e || window.event; var o = e.target || e.srcElement; if (o.id != 'dvReply' && o.parentNode.id != 'dvReply') document.getElementById('dvReply').style.display = 'none'; } </script> function showReply(e) {//展开回复容器用的,e为事件对象,用于阻止事件冒泡的,不执行document.onclick注册的点击事件 var dv = document.getElementById('dvReply'); //获取回复容器 dv.style.display = dv.style.display == 'none' ? 'block' : 'none'; //根据状态判断如果原来隐藏就显示出来,显示的就隐藏起来,切换状态 if (e.stopPropagation) e.stopPropagation(); //firefox阻止事件冒泡 e.cancelBubble = true; //IE的 return false; //阻止执行a的href链接到# } document.onclick = function (e) {//给document注册点击事件,以便获取到当前点击对象 e = e || window.event;//获取事件对象 var o = e.target || e.srcElement; //获取点击到的对象,w3c浏览器和ie不一样,所以要获取2个属性取或等到实际的对象 //下面就是判断点击对象是否是回复容器或者回复容器里面的子对象的,如果是就不隐藏回复容器,不是则隐藏 if (o.id != 'dvReply' && o.parentNode.id != 'dvReply') document.getElementById('dvReply').style.display = 'none'; } 可是parentNode只能获得我的上层父节点,可是如果嵌套了10层DIV的话 判断岂不是要很麻烦? 通过当前对象遍历parentNode看是否有父亲节点为容器id的节点来做<a href="#" onclick="return showReply(event)">回复</a><div id="dvReply" style="display:none"><div><div><div><textarea></textarea><br /><input type="button" value="回复" /></div></div></div></div><script type="text/javascript"> function showReply(e) { var dv = document.getElementById('dvReply'); dv.style.display = dv.style.display == 'none' ? 'block' : 'none'; if (e.stopPropagation) e.stopPropagation(); e.cancelBubble = true; return false; } function isContainer(o, pNodeId) { if (o.id == pNodeId) return true; while (o = o.parentNode) if (o.id == pNodeId) return true; return false; } document.onclick = function (e) { e = e || window.event; var o = e.target || e.srcElement; if (!isContainer(o, 'dvReply')) document.getElementById('dvReply').style.display = 'none'; }</script> 简单的js效果,楼主可以看看jQuery的demo页面 ajax的返回值问题 一个超简单问题 怎么实现“点击alert警告框后表单文本框的内容不清空呢?“ js对话框弹出问题 请教Jueryboxy里,如何在弹出的层中,通过脚本关闭层? 散分100!!求比较好的javascript教程,最好是CHM格式的。 带图片的下拉列表如何实现,谢谢 求一函数,如何去掉一个字符串的第一个字符?? 在js中如何接收php从mysql数据库中检索出的数据!在线等!急!!(如解决高分相赠) 高手们,这样的功能怎么样实现? 求助:根据屏幕宽度改变div的宽度js怎么写? 下拉框特效,去掉form后,可以正常显示,加上就不行了,请问原因,如何修改?
<div id="dvReply" style="display:none"><textarea></textarea><br /><input type="button" value="回复" /></div>
<script type="text/javascript">
function showReply(e) {
var dv = document.getElementById('dvReply');
dv.style.display = dv.style.display == 'none' ? 'block' : 'none';
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
return false;
}
document.onclick = function (e) {
e = e || window.event;
var o = e.target || e.srcElement;
if (o.id != 'dvReply' && o.parentNode.id != 'dvReply') document.getElementById('dvReply').style.display = 'none';
}
</script>
var dv = document.getElementById('dvReply'); //获取回复容器
dv.style.display = dv.style.display == 'none' ? 'block' : 'none'; //根据状态判断如果原来隐藏就显示出来,显示的就隐藏起来,切换状态
if (e.stopPropagation) e.stopPropagation(); //firefox阻止事件冒泡
e.cancelBubble = true; //IE的
return false; //阻止执行a的href链接到#
}
document.onclick = function (e) {//给document注册点击事件,以便获取到当前点击对象
e = e || window.event;//获取事件对象
var o = e.target || e.srcElement; //获取点击到的对象,w3c浏览器和ie不一样,所以要获取2个属性取或等到实际的对象
//下面就是判断点击对象是否是回复容器或者回复容器里面的子对象的,如果是就不隐藏回复容器,不是则隐藏
if (o.id != 'dvReply' && o.parentNode.id != 'dvReply') document.getElementById('dvReply').style.display = 'none';
}
<a href="#" onclick="return showReply(event)">回复</a>
<div id="dvReply" style="display:none"><div><div><div><textarea></textarea><br /><input type="button" value="回复" /></div></div></div></div>
<script type="text/javascript">
function showReply(e) {
var dv = document.getElementById('dvReply');
dv.style.display = dv.style.display == 'none' ? 'block' : 'none';
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
return false;
}
function isContainer(o, pNodeId) {
if (o.id == pNodeId) return true;
while (o = o.parentNode) if (o.id == pNodeId) return true;
return false;
}
document.onclick = function (e) {
e = e || window.event;
var o = e.target || e.srcElement;
if (!isContainer(o, 'dvReply')) document.getElementById('dvReply').style.display = 'none';
}
</script>