У меня index.php вот так:
<script type="text/javascript" src="jquery-1.4.2.js"></script> <script type="text/javascript" src="ajax.js"></script> <a href='one.php' class='ajax'>One</a> <div id="workspace">workspace</div>
one.php
<?php $arr = array ( "workspace" => "<a href='two.php' class='ajax'>two</a>" ); echo json_encode($arr); ?>
two.php
<?php $arr = array( 'workspace' => "Hello World" ); echo json_encode($arr); ?>
ajax.js
jQuery(document).ready(function(){ jQuery('.ajax').click(function(event) { event.preventDefault(); // load the href attribute of the link that was clicked jQuery.getJSON(this.href, function(snippets) { for(var id in snippets) { // updated to deal with any type of HTML jQuery('#' + id).html(snippets[id]); } }); }); });
Когда index.php загружен, есть ссылка (One) и DIV (рабочее пространство). Когда я нажимаю ссылку «Один», вызывается содержимое one.php, и ссылка «Два» появляется в «рабочей области» DIV успешно.
Но теперь, когда я нажимаю ссылку «Два», «Hello World» не появляется в «рабочей области» DIV и открывается отдельно без вызова AJAX.
Как заставить этот код заменить содержимое рабочей области DIV на «Hello World», используя ссылку «TWO» с вышеуказанным потоком?
благодаря
Попробуйте использовать метод live()
вместо click
:
jQuery('.ajax').live('click', function(event) { // your code });
live
используется, когда контент, который вы назначили событиям, присутствует или добавлен / загружен позже.
Проблема в том, что метод init, который делает ссылки «.ajax» настолько волшебными, вызывается только один раз, когда документ загружается. Когда вы заменяете html, волшебство теряется.
Попробуй это:
function assignLinks() { jQuery('.ajax').click(function(event) { event.preventDefault(); // load the href attribute of the link that was clicked jQuery.getJSON(this.href, function(snippets) { for(var id in snippets) { // updated to deal with any type of HTML jQuery('#' + id).html(snippets[id]).click( function() { assignLinks(); }); } }); }); } jQuery(document).ready(function() { assignLinks(); });
Или просто используйте live (как указано ниже).