【问题标题】:jquery load() on each() function working all togethereach() 函数上的 jquery load() 一起工作
【发布时间】:2015-07-22 00:43:54
【问题描述】:

我正在处理一个 ajax 加载驱动的网站。在这里,我试图在不同的链接上加载不同的 url,但我面临一些问题。使用了 4 个链接和 4 个页面来加载每个页面都与另一个页面链接,但是单击链接时正在加载 4 个页面。

我的html是

<div class="col-md-12">
    <a href="ajax/portfolio_single.php" data-content="ajax" class="ajax-call">this is one</a>
    <a href="ajax/portfolio_single2.php" data-content="ajax" class="ajax-call">hello</a>
    <a href="ajax/portfolio_single3.php" data-content="ajax" class="ajax-call">hello</a>
    <a href="ajax/portfolio_single4.php" data-content="ajax" class="ajax-call">hello</a>
    <div class="ajaxshow"></div>
</div>

我的 javascripts 是

(function($){

'use strict';

var ajaxcontent = $('[data-content="ajax"]'),
    pathname = window.location.pathname,
    url = window.location.href,
    ajaxUrl;

ajaxcontent.each( function(index, el) {

    $( this ).append('<span class="ajax-live"></span>');

    ajaxUrl = $(this).attr('href');

    $(this).click(function(event) {
        event.preventDefault();
        $( '.ajax-live' ).addClass('ajax-live-on');
        $( this ).after('<span class="ajax-close animated bounceInRight"></span>');
        $('.ajaxshow').append().load(ajaxUrl);
        $('.ajaxshow').addClass('animated bounceInUp');
        $('.ajaxshow').css('display', 'block');
    });

    $(document.body).on('click', '.ajax-close', function( event ){
        event.preventDefault();
        $( '.ajax-live' ).removeClass('ajax-live-on');
        $( this ).removeClass('ajax-close');
        $( '.ajaxshow' ).fadeOut(600).slideUp();
    });
});

})(jQuery);

虽然hete每个功能都不起作用,但它不起作用。有人可以帮忙吗?

这里有一个工作示例 http://orlandojoes.co.uk/website/ajaxTest.php

【问题讨论】:

    标签: javascript jquery html ajax dom


    【解决方案1】:

    在文档就绪函数中使用您的代码,如下所示:

     $(document).ready(function () {
        var ajaxcontent = $('[data-content="ajax"]'),
            pathname = window.location.pathname,
            url = window.location.href,
            ajaxUrl;
    
        ajaxcontent.each( function(index, el) {
    
            $( this ).append('<span class="ajax-live"></span>');
    
        });
    $(document).off('click','[data-content="ajax"]');
    $(document).on('click','[data-content="ajax"]',function(event) {
      var    ajaxUrl = $(this).attr('href');
                event.preventDefault();
                $( '.ajax-live' ).addClass('ajax-live-on');
                $( this ).after('<span class="ajax-close animated bounceInRight"></span>');
                $('.ajaxshow').append().load(ajaxUrl);
                $('.ajaxshow').addClass('animated bounceInUp');
                $('.ajaxshow').css('display', 'block');
            });
         $(document.body).off('click', '.ajax-close');
            $(document.body).on('click', '.ajax-close', function( event ){
                event.preventDefault();
                $( '.ajax-live' ).removeClass('ajax-live-on');
                $( this ).removeClass('ajax-close');
                $( '.ajaxshow' ).fadeOut(600).slideUp();
            });
        });
    

    我希望这段代码能正常工作。

    【讨论】:

    • 您的函数是在文档的就绪函数中调用。假设当您调用 javascript 函数并且 html 元素在 dom 中不可用时,您的函数将无法工作,这就是您应该在准备好的函数上调用函数的原因。
    • 是的,我知道。但问题不存在。问题是在使用每个实例时创建了 4 个实例。但是当我单击每个 dom 元素时,都会创建 4 次
    • 嘿,我根据您的问题编辑了我的答案。请检查并告诉我这个答案是否对您有帮助。
    • 它还没有工作。它是预期的,但如果我点击关闭按钮,就会出现第四个。我正在上传演示内容,请稍等
    • 只需使用 $('this').prev().find('.ajax-live').removeClass('ajax-live-on'); (或者只是用 $(this) 遍历“ajax-live”和“ajaxshow”两个类,然后执行操作)。我刚刚给出了演示代码。我希望如果正确遍历,那么您可以实现目标。如果你suttisfy然后upvote我的回答
    【解决方案2】:

    问题是您的 ajaxUrl 变量位于与您假设的不同的闭包中,因此在单击它时,它始终是第四个链接。

    这是因为你先做

    var ajaxcontent = $('[data-content="ajax"]'),
        pathname = window.location.pathname,
        url = window.location.href,
        ajaxUrl;
    

    这里,ajaxUrl 对 'each' 闭包是全局的。为了解决这个问题,从“每个”范围之外删除ajaxUrl 声明,并在范围内定义它

    var ajaxcontent = $('[data-content="ajax"]'),
        pathname = window.location.pathname,
        url = window.location.href;
    
    ajaxcontent.each( function(index, el) {
    
        $( this ).append('<span class="ajax-live"></span>');
    
        var ajaxUrl = $(this).attr('href');
    
        $(this).click(function(event) {
    .
    .
    .
    

    也改变

    $('.ajaxshow').append().load(ajaxUrl);
    

    $('.ajaxshow').load(ajaxUrl);
    

    不需要append,因为load 会在ajaxshow div 中插入HTML 响应

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2012-06-09
      相关资源
      最近更新 更多