2010-06-11 14 views
5

mam napisać ten blok kodu w jQuery utworzyć trzy elementy po pewnych wydarzeniachjak usunąć element utworzony za pomocą jquery?

$('body').append(
tmp= $('<div id="tmp"></div>') 
); 

$('<div id="close" />').appendTo("#tmp"); 
$('<div id="box-results" />').appendTo('#tmp'); 

to trzy elementy są tworzone zwykle i dodanych do mojego DOM, ale chcę, aby usunąć je z jakiejś funkcji takich jak to:

$("#close").click(function(e){ 

e.preventDefault(); 
$("#tmp").remove(); 
//$("#overlay").remove(); 
}); 

i po kliknięciu close div noting happen! co jest nie tak z moim kodem?

tutaj jest przykład na stronie: mymagazine.ir/index.php/main/detail/36 - proszę znaleźć „tu jest problem jquery” zdanie w miejscu, ponieważ język strona jest perski

Odpowiedz

11

trzeba dodać obsługi kliknij na #Zamknij po włożeniu element do dokument.

edycja podając żądane demo; przetestowany w ff36:

<html> 
<head> 
<title>whatever</title> 
<style type="text/css"> 
    div { 
    border: 1px solid black; 
    padding: 0.3em; 
    } 
</style> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
    $('body').append($('<div id="tmp"/>')); 
    $('<div id="close">click me</div>').appendTo("#tmp"); 
    $('<div id="box-results">contents</div>').appendTo('#tmp'); 
    $('#close').bind('click', function() 
    { 
     $('#tmp').remove(); 
     return false; 
    }); 
    }); 
</script> 
</head> 
<body> 
</body> 
</html> 

edit

zmiany swojej wtyczki Kod z

$.ajax({ 
    ... 
    success: function() 
    { 
     $('<div id="close"/>').appendTo($('#tmp')); 
    } 
}); 
$('#close').click(function (e) ...); 

do

$.ajax({ 
    ... 
    success: function() 
    { 
     $('<div id="close"/>') 
      .click(function (e) ...) 
      .appendTo($('#tmp')) 
     ; 
    } 
}); 
+0

mógłbyś mi pokazać jakiś kod? masz na myśli $ ("# close"). live ("kliknij", funkcja() {}); jeśli masz na myśli, że to też nie działa. – mehdi

+0

to nie działa. to testujesz? czy to działa dla Ciebie?! – mehdi

+0

@mehdi: Jego odpowiedź działa idealnie dla mnie: http://bit.ly/aKEvbh – Matt

2

należy użyć metody na żywo zamiast kliknięcia. Pozwoli to na dodawanie/usuwanie elementów bez zmiany ich zachowań

$("element").live("click", function() { /*do things*/ }); 
3

Ponieważ elementy z identyfikatorami #tmp i są tworzone dynamicznie, nie można używać click na nich bezpośrednio, trzeba metodę live() zamiast:

$("#close").live('click', function(e){  
    $("#tmp").remove(); 
    return false; 
}); 

Live() Opis:

Dołącz element obsługi do zdarzenia dla wszystkich elementów , które pasują do bieżącego selektora , teraz lub w przyszłości.

Jak widać Twój element jest tworzony dynamicznie (w przyszłości), a nie po wczytaniu strony.

More Info Here

+0

live jest amortyzowane – Rahul

Powiązane problemy