2009-08-09 2 views
5

Возможно ли это?Использовать onmousedown, чтобы получить идентификатор элемента, который вы только что назвали?

Я пытаюсь написать функцию для onmousedown, которая вернет идентификатор элемента, который вы только что нажали, для последующего использования при воссоздании этого элемента в другом div.

ответ

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. 
} 

Edit: Вы можете назначить события чтобы все ваши Scriptaculous draggables на этом пути:

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

Отлично, спасибо. –

+0

Добро пожаловать! – CMS

+1

Стоит отметить, что выше в DOM вы обрабатываете такое событие, тем более осторожным должно быть то, что вы делаете внутри обработчика, так как это потенциально может быть запущено * много *. –

0

Если вы хотите повторить Див идентификатор, легкий способ может быть 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, которая удалит оригинал, а затем напишет новый в раскрывающемся div, который должен иметь тот же класс и идентификатор. Я не собираюсь врать, я еще не гениальный с javascript, я нашел свое вдохновение здесь: http://ashishware.com/MochikitDnD.shtml Однако он назначает идентификатор Math.random(), тогда как мне нужно сохранить один и тот же идентификатор, поэтому я пытаюсь исправить это, а также заставить его работать с неизвестным количеством перетаскиваемых объектов. Тем не менее, я считаю, что у меня есть вторая часть. –

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 в качестве параметра, да? –

+0

Да Крис. Вы можете либо передать фактический объект, либо идентификатор, как это делает CMS в его примере. – Alex

0

Вставьте этот код в свой javascript.

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