0

我有这样的东西,它是从 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;
};

再次编辑,但还是一样,它不会工作:)

4

2 回答 2

0

已解决为 jQuery 后的“RamboNo5”建议- 如何在事件触发后暂时禁用 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>

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;
    });
});
});
于 2012-02-11T10:12:51.270 回答
0

使用live绑定事件时,使用die取消绑定。
你不能通过再说.bind()一遍来重新绑定一个事件。

请参阅此问题以暂时取消绑定事件: jquery 临时取消绑定事件

编辑

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);
于 2012-02-09T13:39:19.977 回答