2009-08-09 117 views

回答

10

您可以使用event delegation,只有一個事件處理程序基本連接到您的整個文檔,並獲得該事件最初派遣元素,使用event.target

document.body.onmousedown = function (e) { 
    e = e || window.event; 
    var elementId = (e.target || e.srcElement).id; 

    // call your re-create function 
    recreate(elementId); 
    // ... 
} 

function recreate (id) { 
    // you can do the DOM manipulation here. 
} 

編輯:您可以分配事件您所有的Scriptaculous的拖拽元素以這樣的方式

Event.observe(window, 'load', function() { 
    Draggables.drags.each(function (item) { 
    Event.observe(item.element, 'mousedown', function() { 
     alert('mouseDown ' + this.id); // the this variable is the element 
    });        // which has been "mouse downed" 
    }); 
}); 

檢查爲例here

+0

完美,謝謝。 – 2009-08-09 04:23:41

+0

不客氣! – CMS 2009-08-09 04:24:19

+1

值得注意的是,在你處理這樣的事件時,你需要更加註意你在處理器內部做了什麼,因爲它可能被解僱*很多*。 – 2009-08-09 04:25:38

0

如果你要複製的DIV ID,一個簡單的方法可能是cloneNode這樣的:

<div id="node1"> 
    <span>ChildNode</span> 
    <span>ChildNode</span> 
</div> 

<div id="container"></div> 

<script type="text/javascript"> 
    var node1 = document.getElementById('node1'); 
    var node2 = node1.cloneNode(true); 

    node2.setAttribute('id', 'node2'); 

    var container = document.getElementById('container'); 
    container.appendChild(node2); 
</script> 
+0

原來也需要刪除。 我正在嘗試對Scriptaculous拖放功能的某些代碼進行刪除原來的操作,然後在droppable div中寫入一個新的代碼,該代碼必須具有相同的類和ID。 我不會說謊,我不是一個很好的JavaScript,我發現我的靈感來自這裏:http://ashishware.com/MochikitDnD.shtml 但是他分配了一個id的Math.random (),而我需要保留相同的ID,所以我正在嘗試修補此問題,並使其能夠處理未知數量的可拖動項。不過,我相信我有第二部分。 – 2009-08-09 04:11:02

2

CMS非常有正確的答案,但你將需要多一點的跨瀏覽器友好。

document.body.onmousedown = function (e) { 
    // Get IE event object 
    e = e || window.event; 
    // Get target in W3C browsers & IE 
    var elementId = e.target ? e.target.id : e.srcElement.id; 
    // ... 
} 
+0

爲了確保這一點很清楚,e會得到我的元素的值,然後我可以傳遞給一個全局變量,和/或調用一個新的函數作爲參數傳入e,是的? – 2009-08-09 04:15:39

+0

是的克里斯。您可以傳遞實際的對象或ID,如CMS在他的示例中所做的那樣。 – Alex 2009-08-09 10:19:24

0

請將此代碼插入到您的JavaScript。

document.getElementById("article").onmouseup(handMu);