2014-11-09 2 views
0

JAVA SCRIPTJQuery привязки событий к новым элементам

$(document).ready(function() { 
    $(".group").click(groupFile); 

    function groupFile(){ 
     alert('clicked!'); 
    } 
}); 
function insert() 

{ 
    $("body").append("<div class='group' ></div>"); 
} 

HTML

<div class='group' > 
</div> 

<input type="button" value="insertNewElement" id="insert" onclick="insert()"/> 

когда страница загружена, по щелчку div.group работает хорошо и огонь groupFile и оповещения для меня. , но при установке нового div.group .onclick div.group функция groupFile не работает? пожалуйста, помогите мне

+0

'$ ("

") .click (groupFile) .appendTo ("body"); '<- Если вы не хотите делегировать, просто привяжите непосредственно к новому элементу, который вы создаете. Там нет необходимости выбирать его, когда у вас есть это прямо там. –

+0

... но вам нужно поставить свою функцию 'groupFile()' вне обратного вызова '.ready()'. –

ответ

2

Вы можете использовать JQuery on() метод делегирования событий в статическом предку, как показано ниже:

$(document).ready(function() { 
$(document).on("click",".group",groupFile); 
function groupFile(){ 
    alert('clicked!'); 
} 
}); 

подробнее о event delegation

+0

Избавьтесь от части '$ (document) .ready()'. Не имеет смысла ждать загрузки документа, если вы привязываетесь к документу. Таким образом, щелчки вызовут обработчик, даже если страница не закончила загрузку. Если вы собираетесь использовать этот уровень делегирования, вы также можете максимально использовать его. –

+0

@squint Это хороший момент ... Но это оставит функцию обработчика в глобальной области видимости ... Я не знаю, имеет ли это значение или нет, но в настоящее время похоже, что OP хочет некоторые функции внутри 'ready () 'и некоторые внешние ... не знаю, почему, иначе я бы изменил именованный обработчик на анонимную функцию ... :) –

+1

Да, это правда. Я бы, вероятно, бросил его в ИИХФ, если это так, но я думаю, мы не знаем, что еще там происходит. Я уверен, что OP бросает код без большой организации, но мы не знаем точно. –

0

Вы должны передать событие BODY (или документ или «обычно» лучше всего на ближайший статический родительский элемент). Использование .on(), проходят selector параметров как это:

$('body').on('click', 'div.group', function(){ 
    //... 
}); 

See explanation

+1

или статический родитель;) – Omar

+0

@Omar О, я, конечно, THX для подсказки! :) –

0

Для динамических элементов, которые необходимо связать с событием на теле:

$("body").on("click", ".group", function(e){ 
    alert('clicked'); 
}); 
+0

Вам не нужно «привязываться» к телу. Это всего лишь один вариант. –

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