2013-06-06 5 views
0

Я пытаюсь выполнить миграцию с jquery 1.7 до 1.10, а живая функция больше не работает.jquery migration from 1.7 to 1.10.1

$("#detail_content").on("click", ".close", function (a) { // is ignored 
//$("#detail_content .close").live("click", function (a) { //works fine with migrate 
    console.log("click"); 
}); 

div.detail_content загружается позже с помощью AJAX, но кнопка закрытия не работает, если я перейти от .live к .on

Я думаю, делегирование отсутствует.

любая идея?

+0

Возможный дубликат [jQuery: как заменить .live на .on?] (Http://stackoverflow.com/questions/10604328/jquery-how-to-replace-live-with-on) – VisioN

+0

он не дублируется. синтаксис в порядке. В этом случае отсутствующим статическим родителем является объект. – hamburger

ответ

4

Похоже #detail_content также является динамичным, то попробуйте

$(document).on("click", "#detail_content .close", function (a) { // is ignored 
//$("#detail_content .close").live("click", function (a) { //works fine with migrate 
    console.log("click"); 
}); 
+0

THX thats it. Я новый в jquery. С помощью mootools вам не нужен статический элемент. – hamburger

2

Вы должны использовать любой ближайший статический родительский элемент (или body наконец):

$("body").on("click", "#detail_content .close", function() { ... }); 

Так что если у вас есть разметка типа:

<body> 
    ... 
    <div id="container"> 
     ... 
     <div id="detail_content"><button class="close">Close</button></div> 
    </div> 
</body> 

и #container не будет заменен после того, как Ajax вызова, то лучше использовать:

$("#container").on("click", "#detail_content .close", function() { ... }); 
0

VISION, это не то же самое, чтобы просто использовать следующий?

$(document).ready(function(){ 
    $(".close").click(function(){ 
     console.log("clicked"); 
    } 
}); 

Есть что-то о коде выше, который медленнее или менее эффективен?

1

Метод .live() устарел в jQuery 1.10 и выше. Используйте метод .on() для присоединения обработчиков событий.

Таким образом, вы можете использовать этот код вместо .live()

$(document).on('click', '#detail_content .close', function(){ 
     //your Code 
}); 

Я думаю, что это answer полезно для вас и в this page вы можете увидеть все устаревший метод, и это полезно для тех, кто хочет миграцию из 1.7 до 1.10