2009-08-09 11 views

Odpowiedz

10

Można użyć event delegation, na zasadzie łączenia obsługi tylko jednego zdarzenia do całego dokumentu, a dostać element którego zdarzenie zostało pierwotnie wysłane, używając 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. 
} 

Edycja: można przypisać zdarzenia aby wszystkie draggables Scriptaculous w ten sposób:

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" 
    }); 
}); 

Sprawdź przykładem here.

+0

Doskonale, dzięki. –

+0

Nie ma za co! – CMS

+1

Warto zauważyć, że im wyżej w DOM radzimy sobie z takim wydarzeniem, tym bardziej należy uważać na to, co robimy wewnątrz handler'a, ponieważ może on potencjalnie zostać zwolniony * bardzo *. –

0

Jeśli chcesz replikować identyfikator div, w prosty sposób może być cloneNode tak:

<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

Oryginał również musi zostać usunięty. Próbuję przywiązać do jakiegoś kodu do funkcji ScriptCulous drag/drop, która usunie oryginał, a następnie napiszę nowy w droppable div, który musi mieć tę samą klasę i ID. Nie zamierzam kłamać, jeszcze nie jestem geniuszem z javascriptem, znalazłem inspirację tutaj: http://ashishware.com/MochikitDnD.shtml Jednak przypisuje on identyfikator Math.random(), podczas gdy ja muszę zachować ten sam identyfikator, więc próbuję to załatać, a także sprawić, by działał z nieznaną liczbą dragów. Uważam jednak, że mam drugą część. –

2

CMS dość dużo ma poprawną odpowiedź, ale trzeba będzie zrobić to trochę bardziej krzyż przeglądarka obsłudze.

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

Aby upewnić się, że jest to jasne, e miałby wtedy wartość mojego elementu, który mógłbym następnie przekazać do zmiennej globalnej, i/lub wywołać nową funkcję, aby przekazać jako parametr, tak? –

+0

Tak Chris. Możesz przekazać rzeczywisty obiekt lub identyfikator, tak jak robi to CMS w swoim przykładzie. – Alex

0

Pls wstaw ten kod do skryptu javascript.

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