JQuery после перезагрузки, щелчок не работает - PullRequest
1 голос
/ 10 мая 2011

Ссылка открывает выпадающий список для выбора действия сортировки.При сортировке страница загружается в себя с помощью jquery load, и раскрывающийся список закрывается.Мы можем сделать это еще раз.После этого ссылка, которая открывает раскрывающийся список, больше не работает, а раскрывающийся список остается закрытым.

Как это исправить?Основная цель - создать рабочее (открывающее и закрывающее) выпадающее меню для сортировки динамической таблицы.(раскрывающийся список также является динамическим, поэтому его необходимо загрузить с помощью запроса ajax)

<div id="wrapper">

    <!-- THIS IS DROPDOWN -->
    <div id="sortdropdown">
    <p><a href="" id="sortn">Name</a><br /><a href="" id="sortd">Date</a></p>
    </div>
    <!-- THIS IS LINK TO OPEN DROPDOWN -->
    <p><a href="" id="sortbutton">Sort by</a></p>            

</div>

<script type="text/javascript">
function doLoad(sort){
    var selector = "div#wrapper";
    $(selector).load('indexsort.php?act='+sort+' '+selector, function(){
        $('div#sortdropdown').hide();
        doBindings();
    });
}
function doBindings(){
    //sorts table on click - sorts by name
    $('a#sortn').click(function(event) {
        event.preventDefault();
        doLoad('sn');
    });
    //sorts table on click - sorts by date
    $('a#sortd').click(function(event) {
        event.preventDefault();
        doLoad('sd');
    });
    //opens/closes sort by dropdown menu
    $('a#sortbutton').click(function(event) {
        event.preventDefault();
        $('div#sortdropdown').toggle();
    });
}
$(document).ready(function(){
    //binds clicks so they are active after load method
    doBindings();
    //hides dropdown after landing
    $('div#sortdropdown').hide();
});
</script>

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Переместите привязки из функции doBindings () и используйте функцию live () jQuery:

$('a#sortbutton').live("click",function(event) {
    event.preventDefault();
    $('div#sortdropdown').toggle();
});

Также измените селекторы.

a#sortbutton менее эффективен, чем просто #sortbutton, как описано в jQuery API :

Для селекторов идентификаторов jQuery использует функцию JavaScript document.getElementById (), котораячрезвычайно эффективныйКогда к селектору идентификатора присоединяется другой селектор, такой как h2 # pageTitle, jQuery выполняет дополнительную проверку, прежде чем идентифицировать элемент как совпадающий.

0 голосов
/ 10 мая 2011

Я думаю, вам нужно отменить привязку событий click в функции doLoad перед вызовом файла indexsort.php.

Я не рекомендую жить, потому что это очень дорогой метод.

...