JQuery: невозможно обновить ссылки (я новичок в JQuery) - PullRequest
1 голос
/ 16 декабря 2010

Я новичок в Jquery и схожу с ума, обновляя в ajax код, содержащий URL-адреса !! Это работает в первый раз, но ссылка больше не работает после того, как ответ ajax переписывает html.

Пожалуйста, найдите ниже мой код.

Первая разметка HTML (Просмотр)

<head>  
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript">  
  $(document).ready(function() { 
    $("a[class=unselected_quid], a[class=quid_selected]").click(function(){
        var url = $(this).attr("name");
        alert(url);
        $.ajax({
            url: "index.php", 
            type: "POST",  
            data: url,
            dataType: "html",
            success: function(msg) {    
                $("#result").html(msg);  
            },
            error: function(){
                alert("error!!!");
            } 
        });
    });
  });
</script>  
</head> 

<?php // set url strings in php
  $url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1";
  $url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2";
?>

<body>  
  <div id="result"><br>
    <a name='<?echo $url?>' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a> <br>
    <a name='<?echo $url2?>' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a><br>
  </div>  
</body>

Тогда PHP (Контроллер)

public function ajaxLinkResponse(){
  $url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1";
  $url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2";

  $code = "<a name='{<?$url?>}' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a> 
  <a name='{<?$url2?>}' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a>";  

  echo($code);
}

1 Ответ

4 голосов
/ 16 декабря 2010

Вам нужно использовать .live() или .delegate() вместо .click(), поскольку вы делаете новые элементы DOM в вызове AJAX, а .click() не обслуживает Создание элемента DOM.
т.е.

$("a[class=unselected_quid], a[class=quid_selected]").live('click',function(e){
e.preventDefault();
// rest of code

или

$(aWrapper).delegate('a[class=unselected_quid], a[class=quid_selected]','click',function(e){
e.preventDefault();
// rest of code

Вы можете спросить: «В чем разница?» ну это должно помочь. В основном делегирование выполняется быстрее, не приводит к сбою при тяжелых обходах DOM, и вы можете предоставить контекст (это важная функция).

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