Временное отключение события jQuery - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть что-то вроде этого, и оно было создано из jQuery .append(html)

 <div class="pPost">
<p>id</p>
<div class="pPostIn">
    <div class="link">
        <a href="http://www.google.com"></a>
    </div>
    <div class="id"></div>
    <div class="txt"></div>
</div>

Тогда функция jQuery выглядит так:

РЕДАКТИРОВАТЬ: 3

$(function () {
$(".link").live({
    mouseenter: function () {
        $(this).css("background-position", "0 0"); //this works
        $(".pPost").die();
    },
    mouseleave: function () {
        $(this).css("background-position", ""); //this works
        $(".pPost").live("click", ajaxCall);
    }
});
return false;
});

И это работает, как и ожидалось, но проблема, которую я пытаюсь решить, состоит в том, как сделать так, чтобы .link исполняемая привязка выполнялась, поскольку живая функция .pPost заняла 1-е место? Я пытался .unbind() / .undelegate() .pPost, но мне не удалось:

РЕДАКТИРОВАТЬ: 3

var ajaxLoad = function () {
    $(".pPost").live("click", function () {

        $.ajax({
            type: "POST",
            url: "rucno/php/archive_page_helper.php",
            data: idData,
            cache: false,

            success: function (html) {                    
                $(pPost).append(html).hide().slideDown(400, function () {
                    $(".link").hide().delay(1000).fadeIn(1000);
                });
            }
        });            
    });
  return false;
};

Отредактировано еще раз, но все так же, оно не будет работать:)

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

решено в соответствии с предложением "RamboNo5" в сообщении jQuery - Как временно отключить прослушиватель события onclick после того, как событие было запущено?

Я просто изменил его, вот как это работает

HTML

 <div class="pPost">
<p>id</p>
<div class="pPostIn">
    <div class="link">
        <a href="http://www.google.com"></a>
    </div>
    <div class="id"></div>
    <div class="txt"></div>
</div>

1010 * JS *

$(function () {
var active= true;
$(function () {
    $(".link").live({
        mouseenter: function () {               
            active= false;                
        },
        mouseleave: function () {                
            active= true;              
        }
    });
    //return false;
});


$(function () {

    $(".pPost").live("click", function () {

        if (!active) {
            return;
        }

        $.ajax({
            type: "POST",
            url: "rucno/php/archive_page_helper.php",
            data: idData,
            cache: false,

            success: function (html) {                           
                $(pPost).append(html).hide().slideDown(400, function () {
                    $(".link").hide().delay(1000).fadeIn(1000);                        

                });

            }
        });

        return false;
    });
});
});

0 голосов
/ 09 февраля 2012

Когда вы используете live для привязки события, используйте die для его привязки.
Вы не можете отменить событие, просто сказав .bind() еще раз.

См. Этот вопрос, чтобы временно отменить привязку события: jquery события временного освобождения

EDIT

var ajaxLoad = function () {
  $.ajax({
    //blablabla
  });
  return false;
};

EDIT Повторите загрузку AJAX.

// Rebind like this
$(".pPost").live("click", ajaxLoad);

EDIT Поскольку ссылки находятся внутри .pPost, когда они перезагружаются, ссылки теряют свою связь и также должны быть перебазированы.

// Rebind links
$('a').click(fn);
$('.pPost').load('blabla.html',function() {
    $('.pPost a').click(fn);
});

EDIT Будьте осторожны с встраиваемыми Ajax-вызовами:

var ajaxLoad = function () {
    $.ajax({
        type: "POST",
        url: "blabla.php",
        data: idData,
        cache: false,

        success: function (html) {

            $(pPost).append(html).hide().slideDown(400, function () {
                $(".link").hide().delay(1000).fadeIn(1000);
            });
        }
    });
};

А потом:

$(".pPost").live("click", ajaxCall);
...