jquery: live () или bind () не работает после использования load () и возвращает false внутри него - PullRequest
0 голосов
/ 04 ноября 2010

продолжение этой темы jquery: live () - живет только один раз? Я выяснил, в чем заключается проблема в моем коде, использую ли я live () или bind () - эта строка ниже после использования load (),

$('.disabled').click(function(){return false;});

Если я не буду использовать эту строку, страница «вернет» ссылку в теге, если я снова нажму на кнопку. например, это первая кнопка (кнопка с текстовой ссылкой) -

<a href="another_page.php">button 1 </a>

что я сделал не так, добавив эту строку? Любая идея, как я могу решить это ...?

ниже приведен код этой функции, которую я пытаюсь решить,

$('.load-item-news:not(.disabled)').bind('click',function(){

        ...

        /* add a .current class to the target item */
        $(this).parentsUntil('.column-global').addClass('current');

        /* add .disabled class to each a tag in the .current element-div */
        $('.current a').addClass('disabled');

        ...

        /* prepend a fresh div */
        $('.column-global.right').prepend('<div class="wrapper-item"></div>');

        ...

        var path = $(this).attr('href');
        var item_wrapper = $('.wrapper-item');

        var array_path = path.split('/');
        var pg_url = $(array_path).last()[0];

        item_wrapper.load(http_root+rp_template+'item_content_news.php?pg_urlx='+pg_url, function(){

            ...

            $('.disabled').click(function(){return false;});
            //$('.current a').click(function(){return false;});

        });

        return false;
    });

спасибо.

1 Ответ

1 голос
/ 04 ноября 2010

Когда вы делаете это:

$('.disabled').click(function(){return false;});

... вы делаете две вещи, возвращая false:

  1. Вы запрещаете браузер по умолчанию (как event.preventDefault()) и

  2. Вы предотвращаете всплеск DOM события (как event.stopPropagation()).

Если вы хотите выполнить одно или другое (например, просто запретить использование по умолчанию), вы можете сделать это:

$('.disabled').click(function(event){ event.preventDefault(); });

Таким образом, вы предотвращаете действие по умолчанию, но непрекратить пузыриться, и поэтому любой обработчик live, который у вас есть, должен в конечном итоге сработать.

Но мне интересно, действительно ли вы хотите этим заниматься.Я предполагаю, что если ссылка может иметь класс «отключен», то иногда ее можно «включить»?Простое удаление «отключенного» класса не отключит этот обработчик кликов (это часть того, для чего live предназначен для обработки изменений за вас).Например:

$('.disabled').live('click', function(event){ event.preventDefault(); });
            // ^^^^^^^^^^^^^-- Note the change

... сообщает jQuery, что вместо поиска элементов с классом «отключен» сейчас вы хотите, чтобы он проверял, когда происходит щелчок, и выполнялся толькообработчик, если элемент соответствует , что момент времени.

...