ajax klicanje funkcij, ko se iz ajaxa izpise html
9 naročnikov
9 naročnikov
Pozdravljeni.
Imam težavo. Spletna stran ima ene vrste sporočila, ko klikneš na sporočilo se z ajaxom generira HTML, ki se izpiše pod to sporočilo, se pravi komentarje.
Komentarji imajo AJAX klice, vendar se ne izvedejo, ker ta HTML generirana z ajaxom ni bila naložena na začetku strani.
Zanima me, kako se refresha browser - na pamet sem rekel, da ta zazna ajax klice v teh zgeneriranih HTML komentarjih?
24 odgovorov
Če govorimo o jQuery ajax funkciji ima le ta .success() metodo. V tej metodi, pač pokličeš novo funkcijo, ki bo prav tako izvedla ajax klic.
Če pa pokažeš kodo, pa morda celo lažje pomagamo ;)
Bo pa le treba povedati malo več. Kakšni so ti AJAX klici in kakšen dogodek jih proži? Je to onlick? Če si v HTML tagu definiral onlick atribut, bi se zadeva ob kliku morala sprožiti, tudi če si v DOM te zadeve insertal kasneje. Malo bolj razloži problem, drugače lahko samo ugibamo.
Hvala obema za pomoč.
HTML
<div class="wall_info" id="'.$wall_item['item']['ID'].'" style="cursor:pointer">'.$description.'</div><div class="wall_info_html_'.$wall_item['item']['ID'].'" style="display:none"></div>
JQUERY
$(".wall_info").click(function() {
VRNJEN HTML, oz. kaj zgenerira PHP
case 'wallinfo':
$wall = $this->CI->wall->wallitem(p('ID'));
$this->json['html'] = '<h3>Komentarji na zapis</h3>';
$this->json['html'] .= '<table class="table table-bordered">';
foreach ($wall['comment'] as $item)
{
$this->json['html'] .= '<tr><td><strong>'.$wall['access'][$item['user_id']]['info']['display_name'].' '.date('d. m. Y H:i:s',strtotime($item['datetime'])).'</strong>'.br().$item['comment'].'</td></tr>';
}
$this->json['html'] .= '<tr><td><strong>Oddaj komentar: '.__('user/display_name').'</strong><br><input name="" tyle="input" style="margin:0.3em 0"><br><button class="btn btn-small btn-success" class="comment_confirm" id="1423">Oddaj komentar</button></td></tr>';
$this->json['html'] .= '</table>';
break;
Ali pa ima element, ki proži click enak ID kot prvi element, ker morajo biti #idji unikatni je lahko to težava :D
Ja, tako kot je rekel tsu, torej. V .success() callbacku bindaj click event na vse na novo dodane elemente s classom wall_info.
jQuery.ajax(), kjer je opisan tudi success callback in .click(), kjer je opisano, kako se binda event handler.
Aja, pa če delaš z insertanjem htmlja po tem ko je DOM že naložen, ti priporočam namesto .click() funkcije uporabiš:
.on("click", function(){
});
mislil sem, če bi mi lahko napisal primer, kako bi to izgledalo pri meni, za mojo kodo. bom pogledal, hvala za linka!
Tako, kot je rekel @tsu: če premetavaš HTML, ko je enkrat DOM naložen, uporabi .on() namesto .click()