2011-04-27 4 views
3

Я использую jquery для разбивки таблицы HTML.привязка к событию click - событие только срабатывает один раз

У меня есть 2 CSS классы, aPage и thePage, Javascript функция, которая создает строку с нумерацией страниц, и JQuery кода для связывания каждой «страницы» в мыши события так, что строка с нумерацией страниц является рассчитывается при нажатии на страницу.

Моя проблема в том, что событие click срабатывает только один раз, хотя я хочу, чтобы он срабатывал при каждом нажатии страницы.

Любая помощь очень ценится. Спасибо!

Мой JavaScript/JQuery код:

var thisPage=1; npages=10; 
//initial pagination 
    $("#pag").html(showPag(thisPage,npages)); 

// bind pagination string to click event 
    $(".aPage").click(function(event){ 
      var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
    }); 
// function that returns pagination string 
    function showPag(thisPage,npages) { 
    p=""; 
    for(i=1;i<=10;i++){ 
    if(i==thisPage) { 
    p+="<span class='thePage'>"+i+"</span>" 
     } 
    else {p+="<span class='aPage'>"+i+"</span>" } 
    } 
    return p; 
    } 

ответ

9

использования жить, чтобы связать событие щелчка

$(".aPage").live('click',function(event){ 
      var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
    }); 
+0

Такие быстрые ответы! Это работает. Должен был подумать об этом. Благодаря!! – Tac

+0

если так, вы можете отметить его как ответ. –

1

Вам нужно либо привязать событие щелчка на пролеты вы repopuplate страницы с или вы можете просто использовать делегат jQuery или функцию live. Что происходит, так это то, что способ привязки события click охватывает только существующие интервалы с классом aPage. Живой или делегат связывается с существующим и будущим:

$(".aPage").live("click", function(event){ 
      var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
    }); 
+0

+1 для объяснения, почему live & delegate будет работать :-) – Graza

+0

Очень ценим !! – Tac

3

Поскольку вы разрушаете старую .aPage ссылку каждый раз, когда вы звоните .html() вам нужно будет либо использовать .live() или .delegate()

Использование .live()

$(".aPage").live("click", function(event){ 
    var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
}); 

Использование .delegate()

$("#pag").delegate(".aPage", "click", function(event){ 
    var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
}); 
+0

Спасибо! Узнал что-то новое о событиях. – Tac

1

Хорошо, что ваше событие click зарегистрировано в элементах класса .aPage NOT элемент #pag. Если этот элемент с классом .aPage находится внутри вашего элемента #pag (вы не указали, так что я просто угадываю здесь), он уничтожается при замене html страницы. Чтобы исправить это, привяжите обработчик кликов к #pag.

Вы также можете попробовать следующее:

изменение

$(".aPage").click(function(){...})

в

$(".aPage").live('click',function(){...})

Это будет связываться со всеми присутствующими и БУДУЩИХ элементов с этой Classname.

+0

Спасибо! Также не нужно делать событие параметр. – Tac

+0

короткий ответ: если вы не используете переменную 'event', то нет, вам не нужно указывать ее в определении функции. (тем не менее он передается функции ... и вы _could_ обращаетесь к нему, но это для другого поста ...) – ampersand

0

С jQuery 1.7, live больше не поддерживается, а делегат рекомендуется.

$("#pag").delegate(".aPage", "click", function(event){ 
    var thisPage=$(this).text() 
    $("#pag").html(showPag(thisPage,npages)); 
}); 
Смежные вопросы