2009-08-09 7 views

risposta

10

È possibile utilizzare event delegation, per collegare praticamente gestore un solo evento per tutto il vostro documento, e ottenere l'elemento che l'evento è stato originariamente inviato, utilizzando 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. 
} 

Edit: È possibile assegnare gli eventi a tutti i vostri draggables Scriptaculous in questo modo:

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

controllare un esempio here.

+0

Perfetto, grazie. –

+0

Prego! – CMS

+1

Vale la pena notare che più in alto nel DOM gestisci un evento come questo, più devi prestare attenzione a ciò che fai all'interno del gestore, poiché potrebbe potenzialmente essere licenziato * molto *. –

0

Se si desidera replicare il div id, un modo semplice potrebbe essere cloneNode come questo:

<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

Anche l'originale deve essere eliminato. Sto provando a virare su qualche codice alla funzionalità di trascinamento Scriptaculous che cancellerà l'originale, quindi scriverne uno nuovo nel div di tipo droppable che deve avere la stessa classe e ID. Non ho intenzione di mentire, non sono ancora un genio con javascript, ho trovato la mia ispirazione qui: http://ashishware.com/MochikitDnD.shtml Tuttavia sta assegnando un id di Math.random(), mentre ho bisogno di mantenere lo stesso ID, quindi sto cercando di applicare questa patch, così come farlo funzionare con un numero sconosciuto di draggables. Credo di avere la seconda parte in giù, però. –

2

CMS ha più o meno la risposta corretta, ma è necessario per rendere il browser un po 'più croce amichevole.

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

Per assicurarsi che questo sia chiaro, e avrebbe quindi il valore del mio elemento che potrei quindi passare a una variabile globale, e/o chiamare una nuova funzione per passare in e come parametro, sì? –

+0

Sì, Chris. Potresti passare l'oggetto reale o l'id come fa CMS nel suo esempio. – Alex

0

Pls inserisci questo codice sul tuo javascript.

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