临时禁用jQuery事件

时间:2012-02-09 13:36:48

标签: jquery events jquery-hover

我有类似的东西,它是从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实时函数“获得第一名”?我尝试.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 :(得分:0)

使用live绑定事件时,请使用die取消绑定。
您不能仅通过再次说出.bind()来重新绑定事件。

查看此问题以暂时取消绑定事件: jquery temporary unbinding events

修改

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

修改 重新绑定ajax加载。

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

修改 由于链接位于.pPost内,当重新加载链接时,链接会松散绑定并且也应该被重新绑定。

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

修改 嵌入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);

答案 1 :(得分:0)

在帖子jQuery - How can I temporarily disable the onclick event listener after the event has been fired?

中解析为“RamboNo5”

我只是要修改它,这就是它的工作原理

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>

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;
    });
});
});