使用load()加载html页面后,jQuery单击事件处理程序不起作用

时间:2013-01-15 13:56:45

标签: javascript jquery

您好我在索引页面上加载了几个html页面,具体取决于点击了什么链接。我有一个问题,链接有asocietted点击事件处理程序。似乎在jQuery加载html文件后,该html中的链接没有绑定事件处理程序绑定到他们。 这是我的代码:

这是其中一个不起作用的链接的html:

<a href="#" id="NavContactPage" data-sectionId="Skills">skills</a>

这是与之相关的jquery代码:

$("nav a , a.first_anchor , a#NavContactPage").click(function(){
    var id = $(this).attr("data-sectionId");
    var link = "load/" + id + ".html";

    $("div#Content").load(link , function(){
        $("section#" + id).fadeIn(); 
        if(id === "Portfolio"){
            $('div.slide').cycle('fade');
        }
        if(id === "Home"){
            $("#jcycleslider").cycle({
                fx: mtransition,
                easing: easing,
                before: onBefore,
                after: onAfter,
                speed: mpace,
                timeout: mnext,
                sync: msync,
                randomizeEffects:0,
                pager:'#jslider_nav'
            })
            $("#jslider_nav a").text("");
        }    
    })      
    return false;
})

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:10)

$("selector").click(...)仅将click事件的回调注册到查询时jQuery可见的元素。因此,对于与此选择器匹配的新添加元素,将不会应用回调。

您需要再次将注释重新注册到新添加的元素,或者您需要使用:

$(document).on('click',"nav a , a.first_anchor , a#NavContactPage", ... );

不建议以root身份使用文档,而是建议使用例如您将内容加载到root的元素,例如$("div#Content").on( .... );

答案 1 :(得分:4)

据我了解,你应该使用.on():

代表团
$(document).on('click',"nav a , a.first_anchor , a#NavContactPage",function(){...}

答案 2 :(得分:3)

当我使用.load()函数将html导入到我的主页面时,

遇到了这个问题。我把它放在我准备好的功能中,它对我有用

drawRect(rect: CGRect) {
    let ctx: CGContext? = UIGraphicsGetCurrentContext()
    let radius: CGFloat = rect.width / 2
    let endAngle = CGFloat(2 * M_PI)
    CGContextAddArc(ctx, bounds.width / 2, bounds.height / 2, radius, 0, endAngle, 1)
    CGContextSetStrokeColorWithColor(ctx, UIColor.blackColor().CGColor)
    CGContextSetFillColorWithColor(ctx, UIColor.whiteColor().CGColor)
    CGContextSetLineWidth(ctx, 4.0)
    CGContextDrawPath(ctx, CGPathDrawingMode.FillStroke)
}

答案 3 :(得分:0)

您是否准备好在jquery上准备事件?

您的事件绑定代码应位于内部并使用而不是单击。我认为这应该可以解决你的问题。

$(function(){

  // Bind event here

});