[jquery] problem z .html()

0

Witam, mam problem z JQuerową funkcją html() i redeklaracją obierku z ID. Oto przykładowy kod:

<script type="text/javascript">

$(document).ready(function()
{


  $("#clickdiv").click(function()
  {
    alert('click');
  });


  $("#change").click(function()
  {
    $("#maindiv").html('<div id="clickdiv" style="position:relative;width:100px;height:100px;background-color:#f00"></div>');
  });


});

</script>




<span id="change">change</span><br/><br/>



<div id="maindiv">

<div id="clickdiv" style="position:relative;width:100px;height:100px;background-color:#000"></div>

</div>

oczywiście ten kod jest tylko przykładem, moim celem nie jest zmienienie koloru BG dla clickdiv ;) ... problemem jest tutaj to, że nowo wpakowany (po wykonaniu $("#change").click(function()) obiekt div do maindiv nie reaguje już na $("#clickdiv").click(function() ... czy da się temu jakoś w prosty sposób zaradzić? Pozdrawiam Kinga.N

0

Albo: http://api.jquery.com/on/(stare wersje miały "live"), albo po prostu robisz sobie coś takiego:

function reattach_events(from) {
  $(from).find('#clickdiv').click(function() {
    // akcja
  });
  // i generalnie przypinasz tutaj wszystkie eventy, które mogą Ci się zepsuć
}

// i potem standardowo:
$(document).ready(function(){
  $("#change").click(function() {
    $("#maindiv").html('<div id="clickdiv" style="position:relative;width:100px;height:100px;background-color:#f00"></div>');
    reattach_events($('#maindiv'));
  });
});

W Twoim przypadku operujesz na wybieraniu elementów po ID, więc to from jest zbędne, ale ja często mam sobie kod, gdzie część divów powiedzmy jest aktualizowana, a w ich zawartości mam sporo eventów, wybieranych raczej po klasach, gdyż elementów jest wiele - wtedy reattach bez elementu startowego (tego, który był aktualizowany) zrobiłby mi podwójne eventy na niektórych elementach.

A dlaczego nie używać po prostu on - delikatna różnica w wydajności jeżeli DOM jest często aktualizowany (czyli ma znaczenie głównie w jakichś większych webaplikacjach). Choć on (dobrze użyte) jest zdecydowanie bardziej wydajne od przestarzałego live.

0

Dziękuję bardzo, tego właśnie potrzebowałam! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1