2010-07-23 2 views
31

Я пытаюсь добавить событие onclick к новым элементам, которые я добавил с помощью JavaScript.Добавить событие onclick для вновь добавленного элемента в JavaScript

Проблема в том, когда я проверяю document.body.innerHTML. Я могу видеть, что onclick = alert ('blah') добавлен к новому элементу.

Но когда я нажимаю этот элемент, я не вижу, чтобы окно предупреждения работало. На самом деле все, что связано с JavaScript не работает ..

вот что я использую, чтобы добавить новый элемент:

function add_img() { 
    var elemm = document.createElement('rvml:image'); 
    elemm.src = 'blah.png'; 
    elemm.className = 'rvml'; 
    elemm.onclick = "alert('blah')"; 
    document.body.appendChild(elemm); 
    elemm.id = "gogo"; 
    elemm.style.position='absolute'; 
    elemm.style.width=55; 
    elemm.style.height=55; 
    elemm.style.top=200; 
    elemm.style.left=300; 
    elemm.style.rotation=200; 
} 

Вот как я называю эту функцию:

<button onclick=add_img()>add image</button> 

Теперь изображение отлично рисует в браузере. Но когда я нажимаю изображение, я не получаю это предупреждение.

+0

О, красота jQuery. Может быть, это будет полезно в будущем :) $ ('. Rvml'). Live ('click', function() {alert (1);}); –

ответ

87

.onclick должно быть установлено как функция вместо строки. Попробуйте

elemm.onclick = function() { alert('blah'); }; 

вместо этого.

+0

отлично спасибо :) – SolidSnake

+0

Это работает для IE8? – human

+0

@human Я уверен, что все работает до IE4. – kennytm

11

Не уверен, но попробуйте:

elemm.addEventListener('click', function(){ alert('blah');}, false); 
+0

Даже с '.addEventListener' второй аргумент по-прежнему должен быть функцией, а не строкой. – kennytm

+0

Использование JQuery я не помню, это одно;) Благодаря –

+0

Это не будет работать в IE8: http://caniuse.com/#search=addEventListener –

1

вы не можете назначить событие на строку. Используйте это:

elemm.onclick = function() {alert ('blah'); };

1

Короткий ответ: вы хотите, чтобы установить обработчик функции:

elemm.onclick = function() { alert('blah'); }; 

Слегка развернутый ответ: вам придется написать несколько строк кода, чтобы получить, чтобы работать последовательно во всех браузерах.

Дело в том, что даже более длинный код, который может решить эту конкретную проблему по множеству общих браузеров, по-прежнему будет иметь свои проблемы. Поэтому, если вам не нужна поддержка кросс-браузера, переходите к совершенно короткому. Если вы заботитесь об этом и абсолютно хотите получить эту единственную работу, пойдите с комбинацией addEventListener и attachEvent. Если вы хотите широко создавать объекты, добавлять и удалять прослушиватели событий во всем своем коде и хотите, чтобы это работало в браузерах, вы определенно хотите делегировать эту ответственность библиотеке, такой как jQuery.

+1

мне это нужно только для интернет-проводник .. короткий один работает как шарм. спасибо за подробное решение, хотя – SolidSnake

1

Я не думаю, что вы можете так поступать. Вы должны использовать:

void addEventListener( 
    in DOMString type, 
    in EventListener listener, 
    in boolean useCapture 
); 

Документация right here.

0

У вас есть три разные проблемы. Прежде всего, нужно указывать значения в тегах HTML! Не делать этого может смутить браузер и может вызвать некоторые проблемы (хотя это, вероятно, не так). Во-вторых, вы должны назначить функцию переменной onclick, как кто-то другой. Мало того, что это правильный способ сделать это в будущем, но это делает вещи намного проще, если вы пытаетесь использовать локальные переменные в функции onclick. Наконец, вы можете попробовать либо addEventListener, либо jQuery, у jQuery есть преимущество более приятного интерфейса.

О, и убедитесь, что ваш HTML проверяет! Это может быть проблемой.

+0

Я использую это локально. так что это не проблема для меня .. о jQuery Мне не понравилось, потому что я не могу взять под контроль все, и его просто беспорядочно с большим количеством кодов, и это влияет на другие библиотеки javascript. Я предпочел бы строить свою собственную библиотеку, а не тратить время на то, чтобы выяснить, как использовать jQuery. спасибо за вашу помощь хотя :) – SolidSnake

-1

Если вы не хотите писать весь код, который вы когда-то писали в вызываемой вами функции. Используйте следующий код, используя jQuery:

$ (элемент) .on ('click', function() {add_img();});

Смежные вопросы