0

我在一页中有多个颜色框。

这些颜色框的链接是用 javascript 生成的。

现在,每次生成打开颜色框的新链接时,任何与颜色框关联的点击链接都将转到该新链接的 url。

这就是我声明颜色框的方式:

$('.ajax').colorbox();

链接中的 href 是正确的,但仍会发送到最后生成的链接的 href。

提前致谢。

编辑:这是我添加一些链接的代码:

$('.albums').live('click', function(e){
    e.preventDefault();
    e.stopPropagation();
    parent_id           = $(this).parents().eq(2)[0].id;
    parent_header       = $('#' + parent_id + ' header')[0].innerHTML;
    parent_section      = $('#' + parent_id + ' section')[0].innerHTML;
    parent_footer       = $('#' + parent_id + ' footer')[0].innerHTML;
    fragment            = $(this).attr('href').split('/')[$(this).attr('href').split('/').length - 1];
    parent              = $(this).parents().eq(2)[0].id;
    if(fragment.indexOf('_-_') !== -1)
        page = fragment.replace('_-_', '/');
    else
        page = fragment;
    old_data[parent_id] = {'header': parent_header, 'footer': parent_footer, 'section': parent_section, 'link': parent + '/' + page};
    $.post('files/get_page', { page: old_data[parent_id]['link'] }, function(data){
        ret     = JSON.parse(data);
        a       = $('<a>').addClass('reset_link').attr('href', '#').append('Back To Albums');
        a.click(function(e){
            e.preventDefault();
            e.stopPropagation();
            this_parent_id      = $(this).parents().eq(1)[0].id;
            $('#' + this_parent_id + ' header').html(old_data[this_parent_id]['header']);
            $('#' + this_parent_id + ' section').html(old_data[this_parent_id]['section']);
            $('#' + this_parent_id + ' footer').html(old_data[this_parent_id]['footer']);
        })
        $('#' + parent).children().eq(0).html(a);
        $('#' + parent).children().eq(0).append(ret.header);
        $('#' + parent).children().eq(1).html('');
        for(i in ret.body.images){
            href            = ret.body.href + ret.body.images[i].image_name;
            image_id        = ret.body.images[i].image_id;
            delete_div_id   = 'delete_image_' + image_id;
            body            = $('<div>').addClass('albums_div');
            delete_div      = $('<div>').addClass('delete').append('&#10006; Supprimer').attr('id', image_id);
            a               = $('<a>').addClass('lightbox').attr('href', href);
            a.attr('onclick', 'return false;');
            a.append('&#9673; ' + ret.body.images[i].image_name);
            delete_div.click(function(){
                id          = delete_div_id;
                id_array    = id.split('_');
                $.post('files/delete', { id: image_id, del: id_array[1] }, function(data){
                    $(body).remove();
                });
            });
            body.append(a);
            body.append(delete_div);
            $('#' + parent).children().eq(1).append(body);
            $('.lightbox').colorbox({rel: 'group1'});
        }

        footer  = $('<a>').addClass(ret.footer['attr'].class).attr('id', ret.footer['attr'].id).attr('href', ret.footer['href']);
        footer.append(ret.footer['text']);
        footer.click(function(e){
            e.preventDefault();
            $.colorbox({href: ret.footer['href']});
        });
        $('#' + parent).children().eq(2).html(footer);
    });
});

注意:代码使用正确的 href 生成正确的链接,但它本身的颜色框中的问题。我知道这一点,因为我这样做了:

我为带有颜色框的链接分配了一个实时点击事件,如下所示:

$(".upload_file").live('click', function(){
    console.log($(this)[0].href);
});

并且打印到控制台的 href 是正确的,但是在颜色框中显示的页面是错误的。

编辑 2 添加 HTML:

javascript更改代码之前的页面:

<section id="reference">
    <header class="inner_header"><h3>R&#201;F&#201;RENCE PAGE SECTION</h3></header>
    <section>
        <h4>Choose an album :</h4>
        <div class="albums_div">
            <a href="res_yass" onClick="return false;" class="albums">&#9733; R&#233;sidence YASSINE</a>
            <div class="delete" id="delete_album_1">&#10006; Supprimer</div>
        </div>
        <div class="albums_div">
            <a href="res_nesr" onClick="return false;" class="albums">&#9733; R&#233;sidence NESRINE</a>
            <div class="delete" id="delete_album_2">&#10006; Supprimer</div>
        </div>
        <div class="albums_div">
            <a href="azerty" onClick="return false;" class="albums">&#9733; Azerty</a>
            <div class="delete" id="delete_album_8">&#10006; Supprimer</div>
        </div>
    </section>
    <footer class="inner_footer"><a href="files/add/reference" class="add_album ajax" id="reference">Add an album</a></footer>
</section>

javascript更改代码后的页面:

<section id="reference">
    <header class="inner_header"><a class="reset_link" href="#">Back To Albums</a><h4>Azerty</h4></header>
    <section>
        <div class="albums_div">
            <a class="lightbox cboxElement" href="f352702127.jpg" onclick="return false;">◉ f352702127.jpg</a>
            <div class="delete" id="128">✖ Supprimer</div>
        </div>
        <div class="albums_div">
            <a class="lightbox cboxElement" href="f65564287.jpg" onclick="return false;">◉ f65564287.jpg</a>
            <div class="delete" id="129">✖ Supprimer</div>
        </div>
        <div class="albums_div">
            <a class="lightbox cboxElement" href="f184021055.jpg" onclick="return false;">◉ f184021055.jpg</a>
            <div class="delete" id="130">✖ Supprimer</div>
        </div>
    </section>
    <footer class="inner_footer"><a class="upload_file ajax" id="azerty" href="uploader/get_form/reference/azerty">Upload une image</a></footer>
</section>
4

1 回答 1

0

解决了,问题不在于颜色框,我只是从这里更改代码:

$('.albums').live('click', function(e){
    e.preventDefault();
    e.stopPropagation();
    parent_id           = $(this).parents().eq(2)[0].id;
    parent_header       = $('#' + parent_id + ' header')[0].innerHTML;
    parent_section      = $('#' + parent_id + ' section')[0].innerHTML;
    parent_footer       = $('#' + parent_id + ' footer')[0].innerHTML;
    fragment            = $(this).attr('href').split('/')[$(this).attr('href').split('/').length - 1];
    parent              = $(this).parents().eq(2)[0].id;
    if(fragment.indexOf('_-_') !== -1)
        page = fragment.replace('_-_', '/');
    else
        page = fragment;
    old_data[parent_id] = {'header': parent_header, 'footer': parent_footer, 'section': parent_section, 'link': parent + '/' + page};
    $.post('files/get_page', { page: old_data[parent_id]['link'] }, function(data){
        ret     = JSON.parse(data);
        a       = $('<a>').addClass('reset_link').attr('href', '#').append('Back To Albums');
        a.click(function(e){
            e.preventDefault();
            e.stopPropagation();
            this_parent_id      = $(this).parents().eq(1)[0].id;
            $('#' + this_parent_id + ' header').html(old_data[this_parent_id]['header']);
            $('#' + this_parent_id + ' section').html(old_data[this_parent_id]['section']);
            $('#' + this_parent_id + ' footer').html(old_data[this_parent_id]['footer']);
        })
        $('#' + parent).children().eq(0).html(a);
        $('#' + parent).children().eq(0).append(ret.header);
        $('#' + parent).children().eq(1).html('');
        for(i in ret.body.images){
            href            = ret.body.href + ret.body.images[i].image_name;
            image_id        = ret.body.images[i].image_id;
            delete_div_id   = 'delete_image_' + image_id;
            body            = $('<div>').addClass('albums_div');
            delete_div      = $('<div>').addClass('delete').append('&#10006; Supprimer').attr('id', image_id);
            a               = $('<a>').addClass('lightbox').attr('href', href);
            a.attr('onclick', 'return false;');
            a.append('&#9673; ' + ret.body.images[i].image_name);
            delete_div.click(function(){
                id          = delete_div_id;
                id_array    = id.split('_');
                $.post('files/delete', { id: image_id, del: id_array[1] }, function(data){
                    $(body).remove();
                });
            });
            body.append(a);
            body.append(delete_div);
            $('#' + parent).children().eq(1).append(body);
            $('.lightbox').colorbox({rel: 'group1'});
        }

        footer  = $('<a>').addClass(ret.footer['attr'].class).attr('id', ret.footer['attr'].id).attr('href', ret.footer['href']);
        footer.append(ret.footer['text']);
        footer.click(function(e){
            e.preventDefault();
            e.stopPropagation();
            $.colorbox({href: ret.footer['href']});
        });
        $('#' + parent).children().eq(2).html(footer);
    });
});

对此:

$('.albums').live('click', function(e){
    e.preventDefault();
    e.stopPropagation();
    parent_id            = $(this).parents().eq(2)[0].id;
    parent_header        = $('#' + parent_id + ' header')[0].innerHTML;
    parent_section       = $('#' + parent_id + ' section')[0].innerHTML;
    parent_footer        = $('#' + parent_id + ' footer')[0].innerHTML;
    fragment             = $(this).attr('href').split('/')[$(this).attr('href').split('/').length - 1];
    parent               = $(this).parents().eq(2)[0].id;
    if(fragment.indexOf('_-_') !== -1)
        page = fragment.replace('_-_', '/');
    else
        page = fragment;
    old_data[parent_id]   = {'header': parent_header, 'footer': parent_footer, 'section': parent_section, 'link': parent + '/' + page};
    $.post('files/get_page', { page: old_data[parent_id]['link'] }, function(data){
        ret = JSON.parse(data);
        swap_content(ret);
    });
});
function swap_content(ret){
    a      = $('<a>').addClass('reset_link').attr('href', '#').append('Back To Albums');
    a.click(function(e){
        e.preventDefault();
        e.stopPropagation();
        this_parent_id = $(this).parents().eq(1)[0].id;
        $('#' + this_parent_id + ' header').html(old_data[this_parent_id]['header']);
        $('#' + this_parent_id + ' section').html(old_data[this_parent_id]['section']);
        $('#' + this_parent_id + ' footer').html(old_data[this_parent_id]['footer']);
    })
    $('#' + parent).children().eq(0).html(a);
    $('#' + parent).children().eq(0).append(ret.header);
    $('#' + parent).children().eq(1).html('');
    for(i in ret.body.images){
        href            = ret.body.href + ret.body.images[i].image_name;
        image_id        = ret.body.images[i].image_id;
        delete_div_id   = 'delete_image_' + image_id;
        body            = $('<div>').addClass('albums_div');
        delete_div      = $('<div>').addClass('delete').append('&#10006; Supprimer').attr('id', image_id);
        a               = $('<a>').addClass('lightbox').attr('href', href);
        a.attr('onclick', 'return false;');
        a.append('&#9673; ' + ret.body.images[i].image_name);
        delete_div.click(function(){
            id          = delete_div_id;
            id_array    = id.split('_');
            $.post('files/delete', { id: image_id, del: id_array[1] }, function(data){
                $(body).remove();
            });
        });
        body.append(a);
        body.append(delete_div);
        $('#' + parent).children().eq(1).append(body);
        $('.lightbox').colorbox({rel: 'group1'});
    }

    footer = $('<a>').addClass(ret.footer['attr'].class).attr('id', ret.footer['attr'].id).attr('href', ret.footer['href']);
    footer.append(ret.footer['text']);
    footer.click(function(e){
        e.preventDefault();
        e.stopPropagation();
        $.colorbox({href: ret.footer['href']});
    });
    $('#' + parent).children().eq(2).html(footer);
}

说明: 我创建元素的第一个代码发生在全局范围内,因此每次执行代码时都会覆盖变量,并且我在这里将颜色框分配给 click 函数:

footer.click(function(e){
    e.preventDefault();
    e.stopPropagation();
    $.colorbox({href: ret.footer['href']});
});

所以每次页脚变量被重写时,点击被重新分配给新的页脚,这就是为什么 colorbox 将数据发送到错误的 url 所以我所要做的就是使这些变量成为函数的本地变量,在这种情况下是 swap_content() 函数现在每个页脚都是唯一的,因此颜色框会将数据发送到正确的 url。感谢那些试图回答的人。希望这对任何人都有帮助。

于 2012-12-15T15:09:17.300 回答