JQuery, PHP и Ajax проблема: не удается заставить динамическую ссылку загружать динамический контент - PullRequest
0 голосов
/ 14 января 2010

На веб-сайте IBM есть отличное учебное пособие , в котором я провел простой список поиска / результатов с использованием jQuery, PHP и Ajax.

Мне удалось заставить его работать, и это действительно круто.

Одна проблема. Я хочу, чтобы результаты были гиперссылками, и я не могу запустить ни один сценарий Java для результатов.

Вот скрипт, который у меня есть (включает в себя то, что было в учебнике, плюс дополнительный скрипт, необходимый для перетекания гиперссылки, поведения щелчка):

<script type='text/javascript'>
$(document).ready(function(){
$("#search_results").slideUp();
$("#search_button").click(function(e){
e.preventDefault();
ajax_search();
});
$("#search_term").keyup(function(e){
e.preventDefault();
ajax_search();
});
$("a").click(ClickInterceptor);
});

function ajax_search(){
$("#search_results").show();
var search_val=$("#search_term").val();
$.post("./find.php", {search_term : search_val}, function(data){
if (data.length>0){
$("#search_results").html(data);
}
})
}

function ClickInterceptor(e)
{
window.alert("Hellow World!");
return false;
}
</script> 

Если я поместил следующий html под тегом <body>:

<a href="test">this will work</a>

Откроется окно предупреждения.

Однако, если я изменю результаты на гиперссылки (можно найти в find.php, перечисляя 7 из учебника):

$string .= "<a href=\"test\">".$row->name."</a> - "; 

Не работает.

Есть идеи, как это исправить?

Ответы [ 2 ]

2 голосов
/ 14 января 2010

Функция click связывается при запуске. Вам нужно изменить его на живое связывание .

$("a").live("click", ClickInterceptor);

Или вы можете просто связать его при обновлении результатов поиска, поставив следующее после $("#search_results").html(data):

$("#search_results a").click(ClickInterceptor);
0 голосов
/ 14 января 2010

На самом деле проблема довольно проста, $("a").click(ClickInterceptor); будет искать только те элементы, которые в данный момент существуют в DOM. Все, что вам нужно сделать, это изменить эту строку на:

$("a").live("click", ClickInterceptor);

Я бы также посоветовал уделить время, чтобы узнать больше о Событиях jQuery / live .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...