2012-02-09 5 views
0

У меня есть JS:Ajax работает только один раз Codeigniter

jQuery('.unblock').click(function(){ 
     var num = jQuery('.page.active').text(); 
     var ban_id = jQuery('.unblock').attr('id'); 

     jQuery.post('http://127.0.0.1/auth_system_1/user_activity/delete_user_ban', { ban_id : ban_id, num : num }, function(data) { 

       if (data.status == 'ok') 
       { 
        //jQuery('.comment-box').remove(); 
        jQuery('#ban_list').append(data.html); 
       } 
       else 
       { 
        alert('error'); 
       } 

     }, 'json'); 
    }); 

Мой контроллер:

function delete_user_ban() 
{ 
    $user_id = $this->session->userdata('user_id'); 

    $ban_id = $this->input->post('ban_id'); 

    $current_page = (int)$this->input->post('num'); 

    $current_page = ($current_page-1)*2; 

    //$this->activity_model->delete_user_ban($ban_id); 

    $per_page = 2; 

    $data['ban_list'] = $this->user_activity_lib->user_ban_list($user_id, $current_page, $per_page); 

    $data['test'] = rand(1,100); 

    $html = $this->load->view('front_end/ajax_delete_ban', $data, true); 

    unset($data); 
    unset($user_id); 
    unset($ban_id); 

    echo json_encode(array(
          'status' => 'ok', 
          'html' => $html, 
          'start_page' => $current_page)); 

} 

$data['test'] = rand(1,100); is for test! I make random number and send it to view. 

Моя проблема заключается в том, что у меня есть на странице несколько блоков, при нажатии кнопки «разбанить» запись удалить в базы данных и с json я возвращаю загруженные строки (2 элемента на страницу), и когда я пытаюсь нажать ту же кнопку на блоке, который пришел из json, это не работает?! Зачем ?

Мой ajax не звонит, если я нажимаю на предметы, которые пришли от json?

Вид, который был получен от json, является тем же самым, который я загружаю при загрузке страницы.

ответ

6

Ключ пользователя jQuery's on().

.on() - jQuery API

Почему? Элементы HTML, добавленные на веб-страницу после загрузки DOM, не будут «видеть» такие события, которые были объявлены, например. .click(), или .hover(), и так далее.

jQuery('.unblock').on('click', function(){ 
    var num = jQuery('.page.active').text(); 
    var ban_id = jQuery('.unblock').attr('id'); 

    jQuery.post('http://127.0.0.1/auth_system_1/user_activity/delete_user_ban', { ban_id : ban_id, num : num }, function(data) { 

      if (data.status == 'ok') 
      { 
       //jQuery('.comment-box').remove(); 
       jQuery('#ban_list').append(data.html); 
      } 
      else 
      { 
       alert('error'); 
      } 

    }, 'json'); 
}); 

Примечание: Метод JQuery в on() был введен в JQuery 1.7. Если вы используете более старую версию jQuery, используйте вместо этого метод live().

.live() - jQuery API

+0

'живой()' фактически был устаревшим JQuery 1.7 –

+0

большое спасибо! – Viktors

+1

@papaiatis: Nice ninja edit - может +1 вы сейчас :) –

Смежные вопросы