分享一个私以为不错的JQUERY拖拽例子,另有问题求教 本帖最后由 tcwsyt 于 2010-05-12 13:54:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为它是动态生成的你没有追加事件,加入生成的时候你追加了双击事件就可以了,比如 html = "<img src = 'xx.jpg' ondblclick='function(){alert('hello world')}'>"这样肯定可以或者html = "<img src = 'xx.jpg' ondblclick='test()'>"function test(){ alert('hello world');}这样也可以,一些动态生成的标签一定要注意追加事件 何谓动态生成?这本来就是个静态页面,我希望完成的功能是用JQUERY给所有IMG标签(包括在拖放框里的)添加双击事件,更何况用你说的方法。<ul class="drag grid"><li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" ondblclick='function(){alert('hello world')}' alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li><li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li><li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li></ul>手动加上ondblclick也触发事件。还是我理解你的有错了? 上面说错了。手动加上ondblclick也不触发事件。 需要对每个image都加上事件,应该可以的 那样的话我还要JQUERY干嘛?更何况全手动加上也不行。什么叫应该可以的。。朋友你测试下再回答好嘛。。复制黏贴另存为一下用的了你几秒钟。。 现在注释掉绑定拖动那一行//options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);发现可弹出hello world由此猜测是由于单击图片的时候默认开启拖动,所以无法触发双击事件?还是说可以在绑定拖动这里绑定一个双击事件?诚信求教,能解惑的, 另开200分贴相赠。 是因为options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);绑定了图片的onmousedown而覆盖了dblclick或影响了dblclick? 不好意思 我说错了 刚才测试了下 应该没有影响应该是dragStart方法里面的某些代码影响了dblclick还在找 如果兄弟找到问题所在麻烦说一下密切关注中 tempBox.html(ThisO.html());ThisO.html('');$(document).mouseup(This.dragStop);if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放注释掉以上4行就可以dragStop方法里也有互换的对html的操作由此可见应该是lieri111说的那个问题学习了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>物品栏拖拽--Drag and Drop</title><meta name="description" content="物品栏拖拽,拖放" /><meta name="keywords" content="物品栏拖拽,拖放" /><style type="text/css">body{font:12px Verdana, Arial, "宋体", sans-serif;}h1{font-size: 18px;font-family: 微软雅黑;font-weight:normal;}h2{clear:both;font-size: 16px;margin: 0;padding: 5px;border-bottom: 1px solid #69c;color: #1a1;font-family: 微软雅黑;font-weight:normal;}h3{margin: 0;font-size: 14px;font-family: 微软雅黑;font-weight:normal;}p{clear:both;}.author{position:fixed;_position: absolute;right:20px;top:20px;}ul{clear:both;float: left;}/*格子拖放*/.grid li{float: left;list-style: none;width: 64px;height: 64px;border: 1px solid #ccc;background: #eee;margin: 5px;padding: 1px;-moz-user-select:none;}.grid img{width:64px;height: 64px;}.grid div{position: relative;}.grid span{position: absolute;right:1px;top:1px;color: #fff;}/*交换数据用的DIV*/#tempBox{position: absolute;z-index:9999;}/*单个拖放demo*/#test{clear:both;width: 500px;margin: 30px;padding: 10px;line-height: 24px;background: #ccc;}</style><script type="text/javascript" src="jquery-1.3.2.js"></script></head><body><h1>拖放,拖拽,仿物品栏拖拽.</h1><h2>Drop Container</h2><ul class="drop grid"><li ondblclick="test()">1</li><li></li><li></li><li></li><li></li></ul><h2>Drags</h2><ul id="drag_grid" class="drag grid"><li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li><li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li><li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li></ul><div id="test"><h2 align="center">标题拖动</h2><p>这是一个JQ拖放插件.</p><h3>功能:</h3><ol><li>限制拖动范围</li><li>可设置是否可放置(drop) 及可放置(drop)位置</li><li>设置拖动手柄</li><li>拖动完成后回调函数</li></ol><p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p></div><li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li><p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p><script type="text/javascript"><!--//拖放插件DragDrop$.fn.Drag=function (options) {var defaults={limit : window,//是否限制拖放范围,默认限制当前窗口内drop:false,//是否drophandle:false,//拖动手柄finish:function () {}//回调函数};var options=$.extend(defaults,options);this.X=100;//初始位置this.Y=100;this.dx=0;//位置差值this.dy=0;var This=this;var ThisO=$(this);//被拖目标var thatO;if (options.drop) {var ThatO=$(options.drop);//可放下位置ThisO.find('div').css({cursor:'move'});var tempBox=$('<div id="tempBox" class="grid"></div>');}else {options.handle ? ThisO.find(options.handle).css({cursor:'move','-moz-user-select':'none'}) : ThisO.css({cursor:'move','-moz-user-select':'none'});}//拖动开始this.dragStart=function (e) {var cX=e.pageX;var cY=e.pageY;if (options.drop) {ThisO=$(this);if (ThisO.find('div').length!=1) {return}//如果没有拖动对象就返回This.X=ThisO.find('div').offset().left;This.Y=ThisO.find('div').offset().top;tempBox.html(ThisO.html());ThisO.html('');$('body').append(tempBox);tempBox.css({left:This.X,top:This.Y});}else {This.X=ThisO.offset().left;This.Y=ThisO.offset().top;ThisO.css({margin:0})}This.dx=cX-This.X;This.dy=cY-This.Y;if (!options.drop) {ThisO.css({position:'absolute',left:This.X,top:This.Y})}$(document).mousemove(This.dragMove);$(document).mouseup(This.dragStop);if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放}//拖动中this.dragMove=function (e) {var cX=e.pageX;var cY=e.pageY;if (options.limit) {//限制拖动范围//容器的尺寸var L=$(options.limit)[0].offsetLeft ? $(options.limit).offset().left : 0;var T=$(options.limit)[0].offsetTop ? $(options.limit).offset().top : 0;var R=L+$(options.limit).width();var B=T+$(options.limit).height();//获取拖动范围var iLeft=cX-This.dx, iTop=cY-This.dy;//获取超出长度var iRight=iLeft+parseInt(ThisO.innerWidth())-R, iBottom=iTop+parseInt(ThisO.innerHeight())-B;//alert($(window).height())//先设置右下, 再设置左上if(iRight > 0) iLeft -= iRight;if(iBottom > 0) iTop -= iBottom;if(L > iLeft) iLeft = L;if(T > iTop) iTop = T;if (options.drop) {tempBox.css({left:iLeft,top:iTop})}else {ThisO.css({left : iLeft,top : iTop})}}else {//不限制范围if (options.drop) {tempBox.css({left:cX-This.dx,top:cY-This.dy})}else {ThisO.css({left:cX-This.dx,top:cY-This.dy});}}}//拖动结束this.dragStop=function (e) {if (options.drop) {var flag=false;var cX=e.pageX;var cY=e.pageY;var oLf=ThisO.offset().left;var oRt=oLf+ThisO.width();var oTp=ThisO.offset().top;var oBt=oTp+ThisO.height();if (!(cX>oLf && cX<oRt && cY>oTp && cY<oBt)) {//如果不是在原位for (var i=0; i<ThatO.length; i++) {var XL=$(ThatO[i]).offset().left;var XR=XL+$(ThatO[i]).width();var YL=$(ThatO[i]).offset().top;var YR=YL+$(ThatO[i]).height();if (XL<cX && cX<XR && YL<cY && cY<YR) {//找到拖放目标 交换位置var newElm=$(ThatO[i]).html();$(ThatO[i]).html(tempBox.html());ThisO.html(newElm);thatO=$(ThatO[i]);tempBox.remove();flag=true;break;//一旦找到 就终止循环}}}if (!flag) {//如果找不到拖放位置,归回原位tempBox.css({left:This.X,top:This.Y});ThisO.html(tempBox.html());tempBox.remove();}}$(document).unbind('mousemove');$(document).unbind('mouseup');options.finish(e,ThisO,thatO);if ($.browser.msie) {ThisO[0].releaseCapture();}}//绑定拖动options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);//IE禁止选中文本//document.body.onselectstart=function(){return false;}}//下面是例子//.drag li 里面的元素对应的放置位置是 .drop li和drag li, 完成后回调change函数,默认限制拖动范围是窗口内部$('.drag li').Drag({drop:'.drop li , .drag li',finish:change});//.drog li 里面的元素对应的放置位置是 .drop li和.drag li, 完成后回调change函数,默认限制拖动范围是窗口内部$('.drop li').Drag({drop:'.drop li, .drag li',finish:change});$('#test').Drag({handle:'h2,p,h3,ol',finish:change});//不限制拖动范围 可设置limit:falsevar change=function (e,oldElm,newElm) {//alert('拖动完成')}function test(){ alert("Hello World!")}//-->$(document).ready(function(){ //$("#drop_grid").children("li").dblclick(function(){ alert("Hello World!"); }); });</script></body></html>点击第一个看看有没有效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>物品栏拖拽--Drag and Drop</title><meta name="description" content="物品栏拖拽,拖放" /><meta name="keywords" content="物品栏拖拽,拖放" /><style type="text/css">body{font:12px Verdana, Arial, "宋体", sans-serif;}h1{font-size: 18px;font-family: 微软雅黑;font-weight:normal;}h2{clear:both;font-size: 16px;margin: 0;padding: 5px;border-bottom: 1px solid #69c;color: #1a1;font-family: 微软雅黑;font-weight:normal;}h3{margin: 0;font-size: 14px;font-family: 微软雅黑;font-weight:normal;}p{clear:both;}.author{position:fixed;_position: absolute;right:20px;top:20px;}ul{clear:both;float: left;}/*格子拖放*/.grid li{float: left;list-style: none;width: 64px;height: 64px;border: 1px solid #ccc;background: #eee;margin: 5px;padding: 1px;-moz-user-select:none;}.grid img{width:64px;height: 64px;}.grid div{position: relative;}.grid span{position: absolute;right:1px;top:1px;color: #fff;}/*交换数据用的DIV*/#tempBox{position: absolute;z-index:9999;}/*单个拖放demo*/#test{clear:both;width: 500px;margin: 30px;padding: 10px;line-height: 24px;background: #ccc;}</style><script type="text/javascript" src="js/jquery-1.4.2.js"></script></head><body><h1>拖放,拖拽,仿物品栏拖拽.</h1><h2>Drop Container</h2><ul class="drop grid"><li ondblclick="javascript:alert('hello world!')">1</li><li></li><li></li><li></li><li></li></ul><h2>Drags</h2><ul class="drag grid"><li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li><li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li><li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li><li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li><li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li><li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li></ul><div id="test"><h2 align="center">标题拖动</h2><p>这是一个JQ拖放插件.</p><h3>功能:</h3><ol><li>限制拖动范围</li><li>可设置是否可放置(drop) 及可放置(drop)位置</li><li>设置拖动手柄</li><li>拖动完成后回调函数</li></ol><p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p></div><li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li><p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p><script type="text/javascript"><!--//拖放插件DragDrop$.fn.Drag=function (options) {var defaults={limit : window,//是否限制拖放范围,默认限制当前窗口内drop:false,//是否drophandle:false,//拖动手柄finish:function () {}//回调函数};var options=$.extend(defaults,options);this.X=100;//初始位置this.Y=100;this.dx=0;//位置差值this.dy=0;var This=this;var ThisO=$(this);//被拖目标var thatO;if (options.drop) {var ThatO=$(options.drop);//可放下位置ThisO.find('div').css({cursor:'move'});var tempBox=$('<div id="tempBox" class="grid"></div>');}else {options.handle ? ThisO.find(options.handle).css({cursor:'move','-moz-user-select':'none'}) : ThisO.css({cursor:'move','-moz-user-select':'none'});}//拖动开始this.dragStart=function (e) {var cX=e.pageX;var cY=e.pageY;if (options.drop) {ThisO=$(this);if (ThisO.find('div').length!=1) {return}//如果没有拖动对象就返回This.X=ThisO.find('div').offset().left;This.Y=ThisO.find('div').offset().top;tempBox.html(ThisO.html());ThisO.html('');$('body').append(tempBox);tempBox.css({left:This.X,top:This.Y});}else {This.X=ThisO.offset().left;This.Y=ThisO.offset().top;ThisO.css({margin:0})}This.dx=cX-This.X;This.dy=cY-This.Y;if (!options.drop) {ThisO.css({position:'absolute',left:This.X,top:This.Y})}$(document).mousemove(This.dragMove);$(document).mouseup(This.dragStop);if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放}//拖动中this.dragMove=function (e) {var cX=e.pageX;var cY=e.pageY;if (options.limit) {//限制拖动范围//容器的尺寸var L=$(options.limit)[0].offsetLeft ? $(options.limit).offset().left : 0;var T=$(options.limit)[0].offsetTop ? $(options.limit).offset().top : 0;var R=L+$(options.limit).width();var B=T+$(options.limit).height();//获取拖动范围var iLeft=cX-This.dx, iTop=cY-This.dy;//获取超出长度var iRight=iLeft+parseInt(ThisO.innerWidth())-R, iBottom=iTop+parseInt(ThisO.innerHeight())-B;//alert($(window).height())//先设置右下, 再设置左上if(iRight > 0) iLeft -= iRight;if(iBottom > 0) iTop -= iBottom;if(L > iLeft) iLeft = L;if(T > iTop) iTop = T;if (options.drop) {tempBox.css({left:iLeft,top:iTop})}else {ThisO.css({left : iLeft,top : iTop})}}else {//不限制范围if (options.drop) {tempBox.css({left:cX-This.dx,top:cY-This.dy})}else {ThisO.css({left:cX-This.dx,top:cY-This.dy});}}}//拖动结束this.dragStop=function (e) {if (options.drop) {var flag=false;var cX=e.pageX;var cY=e.pageY;var oLf=ThisO.offset().left;var oRt=oLf+ThisO.width();var oTp=ThisO.offset().top;var oBt=oTp+ThisO.height();if (!(cX>oLf && cX<oRt && cY>oTp && cY<oBt)) {//如果不是在原位for (var i=0; i<ThatO.length; i++) {var XL=$(ThatO[i]).offset().left;var XR=XL+$(ThatO[i]).width();var YL=$(ThatO[i]).offset().top;var YR=YL+$(ThatO[i]).height();if (XL<cX && cX<XR && YL<cY && cY<YR) {//找到拖放目标 交换位置var newElm=$(ThatO[i]).html();$(ThatO[i]).html(tempBox.html());ThisO.html(newElm);thatO=$(ThatO[i]);tempBox.remove();flag=true;break;//一旦找到 就终止循环}}}if (!flag) {//如果找不到拖放位置,归回原位tempBox.css({left:This.X,top:This.Y});ThisO.html(tempBox.html());tempBox.remove();}}$(document).unbind('mousemove');$(document).unbind('mouseup');options.finish(e,ThisO,thatO);if ($.browser.msie) {ThisO[0].releaseCapture();}}//绑定拖动options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);//IE禁止选中文本//document.body.onselectstart=function(){return false;}}//下面是例子//.drag li 里面的元素对应的放置位置是 .drop li和drag li, 完成后回调change函数,默认限制拖动范围是窗口内部$('.drag li').Drag({drop:'.drop li , .drag li',finish:change});//.drog li 里面的元素对应的放置位置是 .drop li和.drag li, 完成后回调change函数,默认限制拖动范围是窗口内部$('.drop li').Drag({drop:'.drop li, .drag li',finish:change});$('#test').Drag({handle:'h2,p,h3,ol',finish:change});//不限制拖动范围 可设置limit:falsevar change=function (e,oldElm,newElm) {//alert('拖动完成')}$("img").dblclick( function () { alert("Hello World!"); }); //--></script></body></html>差不多按照你的意思给第一个LI加上ondblclick事件,可是把图片跟他互换之后两个li都无任何事件。难道就没有办法了嘛? 能不能在互换操作html的同时将事件挂上? 楼主换了位置之后还是可以点击的,如果你加在了li上面的双击事件,你可以试试,你测试的时候肯定是点击的中间,点击方框的边上就有alert的,在firebug下可以看到源码的变换,也就是onldbclick事件还在 是的,确实如此,那为什么会点击方框的边上才有alert呢。。不解。。 想通了。是IMG占据了整个DIV的空间吧。。算了,再自己研究看看了。。 代码太多、使用jquery插件easydrag使用拖动很方便的。 替换的html就是一个divdiv里是img和span 请教一个正则:匹配含有某个字符串的标签 每秒刷新一次 tree 梅老大,可编辑div中让光标在最后一行 如何找到ondblclick事件出发后的原目标的属性值 关于jquery小问题。 msn上的照片显示效果如何做? javascript怎样给另一个页面传递参数,谢谢! 急。。。关于同一个frame里两个网页的同步问题。。。!!! JS 在触摸平板上把一段文章分成几页显示,并且左右滑动.. 下面js代码求助! JSP表单提交alert后代码会执行吗?
html = "<img src = 'xx.jpg' ondblclick='function(){alert('hello world')}'>"这样肯定可以
或者html = "<img src = 'xx.jpg' ondblclick='test()'>"
function test(){
alert('hello world');
}这样也可以,一些动态生成的标签一定要注意追加事件
这本来就是个静态页面,我希望完成的功能是用JQUERY给所有IMG标签(包括在拖放框里的)添加双击事件,更何况用你说的方法。
<ul class="drag grid">
<li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" ondblclick='function(){alert('hello world')}' alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li>
<li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li>
<li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li>
</ul>手动加上ondblclick也触发事件。
还是我理解你的有错了?
更何况全手动加上也不行。什么叫应该可以的。。朋友你测试下再回答好嘛。。复制黏贴另存为一下用的了你几秒钟。。
//options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);发现可弹出hello world
由此猜测是由于单击图片的时候默认开启拖动,所以无法触发双击事件?还是说可以在绑定拖动这里绑定一个双击事件?
诚信求教,能解惑的, 另开200分贴相赠。
不好意思 我说错了
刚才测试了下 应该没有影响
应该是dragStart方法里面的某些代码影响了dblclick
还在找 如果兄弟找到问题所在麻烦说一下
密切关注中
ThisO.html('');
$(document).mouseup(This.dragStop);
if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放注释掉以上4行就可以
dragStop方法里也有互换的对html的操作
由此可见应该是lieri111说的那个问题
学习了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>物品栏拖拽--Drag and Drop</title>
<meta name="description" content="物品栏拖拽,拖放" />
<meta name="keywords" content="物品栏拖拽,拖放" />
<style type="text/css">
body{font:12px Verdana, Arial, "宋体", sans-serif;}
h1{font-size: 18px;font-family: 微软雅黑;font-weight:normal;}
h2{clear:both;font-size: 16px;margin: 0;padding: 5px;border-bottom: 1px solid #69c;color: #1a1;font-family: 微软雅黑;font-weight:normal;}
h3{margin: 0;font-size: 14px;font-family: 微软雅黑;font-weight:normal;}
p{clear:both;}
.author{position:fixed;_position: absolute;right:20px;top:20px;}
ul{clear:both;float: left;}
/*格子拖放*/
.grid li{float: left;list-style: none;width: 64px;height: 64px;border: 1px solid #ccc;background: #eee;margin: 5px;padding: 1px;-moz-user-select:none;}
.grid img{width:64px;height: 64px;}
.grid div{position: relative;}
.grid span{position: absolute;right:1px;top:1px;color: #fff;}
/*交换数据用的DIV*/
#tempBox{position: absolute;z-index:9999;}
/*单个拖放demo*/
#test{clear:both;width: 500px;margin: 30px;padding: 10px;line-height: 24px;background: #ccc;}
</style>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>
<h1>拖放,拖拽,仿物品栏拖拽.</h1>
<h2>Drop Container</h2>
<ul class="drop grid">
<li ondblclick="test()">1</li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<h2>Drags</h2>
<ul id="drag_grid" class="drag grid">
<li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li>
<li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li>
<li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li>
</ul>
<div id="test">
<h2 align="center">标题拖动</h2>
<p>这是一个JQ拖放插件.</p>
<h3>功能:</h3>
<ol>
<li>限制拖动范围</li>
<li>可设置是否可放置(drop) 及可放置(drop)位置</li>
<li>设置拖动手柄</li>
<li>拖动完成后回调函数</li>
</ol>
<p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p>
</div>
<li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li>
<p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p>
<script type="text/javascript">
<!--
//拖放插件DragDrop
$.fn.Drag=function (options) {
var defaults={
limit : window,//是否限制拖放范围,默认限制当前窗口内
drop:false,//是否drop
handle:false,//拖动手柄
finish:function () {}//回调函数
};
var options=$.extend(defaults,options);
this.X=100;//初始位置
this.Y=100;
this.dx=0;//位置差值
this.dy=0;
var This=this;
var ThisO=$(this);//被拖目标
var thatO;
if (options.drop) {
var ThatO=$(options.drop);//可放下位置
ThisO.find('div').css({cursor:'move'});
var tempBox=$('<div id="tempBox" class="grid"></div>');
}else {
options.handle ? ThisO.find(options.handle).css({cursor:'move','-moz-user-select':'none'}) : ThisO.css({cursor:'move','-moz-user-select':'none'});
}
//拖动开始
this.dragStart=function (e) {
var cX=e.pageX;
var cY=e.pageY;
if (options.drop) {
ThisO=$(this);
if (ThisO.find('div').length!=1) {return}//如果没有拖动对象就返回
This.X=ThisO.find('div').offset().left;
This.Y=ThisO.find('div').offset().top;
tempBox.html(ThisO.html());
ThisO.html('');
$('body').append(tempBox);
tempBox.css({left:This.X,top:This.Y});
}else {
This.X=ThisO.offset().left;
This.Y=ThisO.offset().top;
ThisO.css({margin:0})
}
This.dx=cX-This.X;
This.dy=cY-This.Y;
if (!options.drop) {ThisO.css({position:'absolute',left:This.X,top:This.Y})}
$(document).mousemove(This.dragMove);
$(document).mouseup(This.dragStop);
if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放
}
//拖动中
this.dragMove=function (e) {
var cX=e.pageX;
var cY=e.pageY;if (options.limit) {//限制拖动范围
//容器的尺寸
var L=$(options.limit)[0].offsetLeft ? $(options.limit).offset().left : 0;
var T=$(options.limit)[0].offsetTop ? $(options.limit).offset().top : 0;
var R=L+$(options.limit).width();
var B=T+$(options.limit).height();
//获取拖动范围
var iLeft=cX-This.dx, iTop=cY-This.dy;
//获取超出长度
var iRight=iLeft+parseInt(ThisO.innerWidth())-R, iBottom=iTop+parseInt(ThisO.innerHeight())-B;
//alert($(window).height())
//先设置右下, 再设置左上
if(iRight > 0) iLeft -= iRight;if(iBottom > 0) iTop -= iBottom;
if(L > iLeft) iLeft = L;
if(T > iTop) iTop = T;
if (options.drop) {
tempBox.css({left:iLeft,top:iTop})
}else {
ThisO.css({left : iLeft,top : iTop})
}
}else {
//不限制范围
if (options.drop) {
tempBox.css({left:cX-This.dx,top:cY-This.dy})
}else {
ThisO.css({left:cX-This.dx,top:cY-This.dy});
}
}}
//拖动结束
this.dragStop=function (e) {
if (options.drop) {
var flag=false;
var cX=e.pageX;
var cY=e.pageY;
var oLf=ThisO.offset().left;
var oRt=oLf+ThisO.width();
var oTp=ThisO.offset().top;
var oBt=oTp+ThisO.height();
if (!(cX>oLf && cX<oRt && cY>oTp && cY<oBt)) {//如果不是在原位
for (var i=0; i<ThatO.length; i++) {
var XL=$(ThatO[i]).offset().left;
var XR=XL+$(ThatO[i]).width();
var YL=$(ThatO[i]).offset().top;
var YR=YL+$(ThatO[i]).height();
if (XL<cX && cX<XR && YL<cY && cY<YR) {//找到拖放目标 交换位置
var newElm=$(ThatO[i]).html();
$(ThatO[i]).html(tempBox.html());
ThisO.html(newElm);
thatO=$(ThatO[i]);
tempBox.remove();
flag=true;
break;//一旦找到 就终止循环
}
}
}
if (!flag) {//如果找不到拖放位置,归回原位
tempBox.css({left:This.X,top:This.Y});
ThisO.html(tempBox.html());
tempBox.remove();
}
}
$(document).unbind('mousemove');
$(document).unbind('mouseup');
options.finish(e,ThisO,thatO);
if ($.browser.msie) {ThisO[0].releaseCapture();}
}
//绑定拖动
options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);//IE禁止选中文本
//document.body.onselectstart=function(){return false;}
}//下面是例子
//.drag li 里面的元素对应的放置位置是 .drop li和drag li, 完成后回调change函数,默认限制拖动范围是窗口内部
$('.drag li').Drag({drop:'.drop li , .drag li',finish:change});
//.drog li 里面的元素对应的放置位置是 .drop li和.drag li, 完成后回调change函数,默认限制拖动范围是窗口内部
$('.drop li').Drag({drop:'.drop li, .drag li',finish:change});
$('#test').Drag({handle:'h2,p,h3,ol',finish:change});//不限制拖动范围 可设置limit:false
var change=function (e,oldElm,newElm) {
//alert('拖动完成')
}
function test(){
alert("Hello World!")
}
//-->
$(document).ready(function(){
//$("#drop_grid").children("li").dblclick(function(){ alert("Hello World!"); });
});
</script>
</body>
</html>
点击第一个看看有没有效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>物品栏拖拽--Drag and Drop</title>
<meta name="description" content="物品栏拖拽,拖放" />
<meta name="keywords" content="物品栏拖拽,拖放" />
<style type="text/css">
body{font:12px Verdana, Arial, "宋体", sans-serif;}
h1{font-size: 18px;font-family: 微软雅黑;font-weight:normal;}
h2{clear:both;font-size: 16px;margin: 0;padding: 5px;border-bottom: 1px solid #69c;color: #1a1;font-family: 微软雅黑;font-weight:normal;}
h3{margin: 0;font-size: 14px;font-family: 微软雅黑;font-weight:normal;}
p{clear:both;}
.author{position:fixed;_position: absolute;right:20px;top:20px;}
ul{clear:both;float: left;}
/*格子拖放*/
.grid li{float: left;list-style: none;width: 64px;height: 64px;border: 1px solid #ccc;background: #eee;margin: 5px;padding: 1px;-moz-user-select:none;}
.grid img{width:64px;height: 64px;}
.grid div{position: relative;}
.grid span{position: absolute;right:1px;top:1px;color: #fff;}
/*交换数据用的DIV*/
#tempBox{position: absolute;z-index:9999;}
/*单个拖放demo*/
#test{clear:both;width: 500px;margin: 30px;padding: 10px;line-height: 24px;background: #ccc;}
</style>
<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
</head>
<body>
<h1>拖放,拖拽,仿物品栏拖拽.</h1>
<h2>Drop Container</h2>
<ul class="drop grid">
<li ondblclick="javascript:alert('hello world!')">1</li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<h2>Drags</h2>
<ul class="drag grid">
<li id="l1"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://mat1.qq.com/www/iskin/skin4/expotclogo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif" alt="" title="" /><span>13</span></div></li>
<li id="l5"><div><img src="http://cn.yimg.com/hp/0910/img/yahoo_logo2.gif" alt="" title="" /><span>13</span></div></li>
<li id="l1"><div><img src="http://assets.taobaocdn.com/img/chl/fp/logo080808.png" alt="" title="" /><span>2</span></div></li>
<li id="l2"><div><img src="http://www.it86.cc/uploads/allimg/c090630/12463QO5220-1J360.jpg" alt="" title="" /><span>23</span></div></li>
<li id="l3"><div><img src="http://img1.cache.netease.com/img09/logo/logo.gif" alt="" title="" /><span>1</span></div></li>
<li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li>
</ul>
<div id="test">
<h2 align="center">标题拖动</h2>
<p>这是一个JQ拖放插件.</p>
<h3>功能:</h3>
<ol>
<li>限制拖动范围</li>
<li>可设置是否可放置(drop) 及可放置(drop)位置</li>
<li>设置拖动手柄</li>
<li>拖动完成后回调函数</li>
</ol>
<p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p>
</div>
<li id="l4"><div><img src="http://www.baidu.com/img/baidu_logo.gif" alt="" title="" /><span>13</span></div></li>
<p>类似物品栏里的物品可相互拖拽,而且可以有限制拖放.如:下面格子里的东西可以拖到上面 但是不能拖到下面的其他格子里; 上面格子里的东西可以在上下格子里任意拖放</p>
<script type="text/javascript">
<!--
//拖放插件DragDrop
$.fn.Drag=function (options) {
var defaults={
limit : window,//是否限制拖放范围,默认限制当前窗口内
drop:false,//是否drop
handle:false,//拖动手柄
finish:function () {}//回调函数
};
var options=$.extend(defaults,options);
this.X=100;//初始位置
this.Y=100;
this.dx=0;//位置差值
this.dy=0;
var This=this;
var ThisO=$(this);//被拖目标
var thatO;
if (options.drop) {
var ThatO=$(options.drop);//可放下位置
ThisO.find('div').css({cursor:'move'});
var tempBox=$('<div id="tempBox" class="grid"></div>');
}else {
options.handle ? ThisO.find(options.handle).css({cursor:'move','-moz-user-select':'none'}) : ThisO.css({cursor:'move','-moz-user-select':'none'});
}
//拖动开始
this.dragStart=function (e) {
var cX=e.pageX;
var cY=e.pageY;
if (options.drop) {
ThisO=$(this);
if (ThisO.find('div').length!=1) {return}//如果没有拖动对象就返回
This.X=ThisO.find('div').offset().left;
This.Y=ThisO.find('div').offset().top;
tempBox.html(ThisO.html());
ThisO.html('');
$('body').append(tempBox);
tempBox.css({left:This.X,top:This.Y});
}else {
This.X=ThisO.offset().left;
This.Y=ThisO.offset().top;
ThisO.css({margin:0})
}
This.dx=cX-This.X;
This.dy=cY-This.Y;
if (!options.drop) {ThisO.css({position:'absolute',left:This.X,top:This.Y})}
$(document).mousemove(This.dragMove);
$(document).mouseup(This.dragStop);
if ($.browser.msie) {ThisO[0].setCapture();}//IE,鼠标移到窗口外面也能释放
}
//拖动中
this.dragMove=function (e) {
var cX=e.pageX;
var cY=e.pageY;if (options.limit) {//限制拖动范围
//容器的尺寸
var L=$(options.limit)[0].offsetLeft ? $(options.limit).offset().left : 0;
var T=$(options.limit)[0].offsetTop ? $(options.limit).offset().top : 0;
var R=L+$(options.limit).width();
var B=T+$(options.limit).height();
//获取拖动范围
var iLeft=cX-This.dx, iTop=cY-This.dy;
//获取超出长度
var iRight=iLeft+parseInt(ThisO.innerWidth())-R, iBottom=iTop+parseInt(ThisO.innerHeight())-B;
//alert($(window).height())
//先设置右下, 再设置左上
if(iRight > 0) iLeft -= iRight;if(iBottom > 0) iTop -= iBottom;
if(L > iLeft) iLeft = L;
if(T > iTop) iTop = T;
if (options.drop) {
tempBox.css({left:iLeft,top:iTop})
}else {
ThisO.css({left : iLeft,top : iTop})
}
}else {
//不限制范围
if (options.drop) {
tempBox.css({left:cX-This.dx,top:cY-This.dy})
}else {
ThisO.css({left:cX-This.dx,top:cY-This.dy});
}
}}
//拖动结束
this.dragStop=function (e) {
if (options.drop) {
var flag=false;
var cX=e.pageX;
var cY=e.pageY;
var oLf=ThisO.offset().left;
var oRt=oLf+ThisO.width();
var oTp=ThisO.offset().top;
var oBt=oTp+ThisO.height();
if (!(cX>oLf && cX<oRt && cY>oTp && cY<oBt)) {//如果不是在原位
for (var i=0; i<ThatO.length; i++) {
var XL=$(ThatO[i]).offset().left;
var XR=XL+$(ThatO[i]).width();
var YL=$(ThatO[i]).offset().top;
var YR=YL+$(ThatO[i]).height();
if (XL<cX && cX<XR && YL<cY && cY<YR) {//找到拖放目标 交换位置
var newElm=$(ThatO[i]).html();
$(ThatO[i]).html(tempBox.html());
ThisO.html(newElm);
thatO=$(ThatO[i]);
tempBox.remove();
flag=true;
break;//一旦找到 就终止循环
}
}
}
if (!flag) {//如果找不到拖放位置,归回原位
tempBox.css({left:This.X,top:This.Y});
ThisO.html(tempBox.html());
tempBox.remove();
}
}
$(document).unbind('mousemove');
$(document).unbind('mouseup');
options.finish(e,ThisO,thatO);
if ($.browser.msie) {ThisO[0].releaseCapture();}
}
//绑定拖动
options.handle ? ThisO.find(options.handle).mousedown(This.dragStart) : ThisO.mousedown(This.dragStart);//IE禁止选中文本
//document.body.onselectstart=function(){return false;}
}//下面是例子
//.drag li 里面的元素对应的放置位置是 .drop li和drag li, 完成后回调change函数,默认限制拖动范围是窗口内部
$('.drag li').Drag({drop:'.drop li , .drag li',finish:change});
//.drog li 里面的元素对应的放置位置是 .drop li和.drag li, 完成后回调change函数,默认限制拖动范围是窗口内部
$('.drop li').Drag({drop:'.drop li, .drag li',finish:change});
$('#test').Drag({handle:'h2,p,h3,ol',finish:change});//不限制拖动范围 可设置limit:false
var change=function (e,oldElm,newElm) {
//alert('拖动完成')
}
$("img").dblclick( function () { alert("Hello World!"); });
//-->
</script>
</body>
</html>
差不多按照你的意思给第一个LI加上ondblclick事件,可是把图片跟他互换之后两个li都无任何事件。难道就没有办法了嘛?
是的,确实如此,那为什么会点击方框的边上才有alert呢。。不解。。
想通了。是IMG占据了整个DIV的空间吧。。算了,再自己研究看看了。。
div里是img和span