Javascript inner.HTML不能用于函数 - 创建可移动的div

时间:2012-12-10 20:23:36

标签: javascript dom html drag-and-drop


我想从数据库中获取一个用户列表,在表格中显示他们的名字,当你点击一个名字,一个特殊的div与他的详细信息,你可以移动这个div甚至关闭它。

以下是编写代码的简短方案:  

function openDiv(id){
document.getElementById('divsHere').innerHTML +='<div id="moveable'+id+'">content</div>'}

 <?php database connection... while{

...

<tr onclick='openDiv( ". $row['id'] ." )'>
$script += 'Drag.init(document.getElementById("moveable'+ $row['id'] +'"));'

...

}?>

<div id="divsHere"></div>

echo $script;

div id="moveable'+id+'">

我用过这个很棒的拖拉库。 http://www.dynamicdrive.com/dynamicindex11/domdrag/index.htm (注意我和jQuery有同样的问题)

当div由inner.HTML添加时,似乎拖拽功能不起作用。但是,我没有看到任何其他方式。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:3)

问题是当您执行Drag.init时,您尚未创建提供它的div。

我觉得你在php循环中生成单独的div,就像你对th标签一样,删除你在openDiv开头的innerHTML的设置,它会工作。

我不得不说,看起来你想要的是一个模态对话框,你可以在其他地方找到它并且易于使用。例如:http://jqueryui.com/dialog/这将更容易合作,您可能更喜欢最终结果。

我希望这会有所帮助:)

答案 1 :(得分:1)

尝试使用document.createElement添加div:

var newDiv = document.createElement('div'), 
    textNode = document.createTextNode('content');
newDiv.id = "moveable" + id;
newDiv.appendChild(textNode);
document.getElementById('divsHere').appendChild(newDiv);

并初始化拖动只需执行

Drag.init(newDiv);

如果要初始化拖动的部分代码在其范围内有newDiv

(可能你想创建div并初始化在同一个地方拖动它的可能性。如果我理解你的方案是正确的,那么问题是它首先尝试初始化拖动非现有的div,然后只有当用户点击一行,调用函数openDiv时,才会创建那些div。如果这是正确的,那么要修复它,你需要确保拖动只是初始化之后已经创建了div。)