ajax append导致javascript被执行多次

时间:2013-08-14 22:36:23

标签: php javascript jquery ajax colorbox

我在PHP中创建了一个动态表,其中一行中的每个图像都在ID中有一个特定的URL。

例如:

当用户点击此图片时,它会执行操作。这很好。

之后,在第二个ajax中,它应该用前一个url重新加载colorbox。这也有效,但javascript似乎再次加载(虽然有新的值)?

$('#cboxLoadedContent img[alt="markmessage"]').live('click', function(){
var returnurl = "<?php echo $_SESSION['returnpage']; ?>";
var markurl = $(this).attr('id');
alert(markurl);

// Do the action
$.ajax({
    method:'GET',
    url: markurl,
    cache:false
});

// Reload colorbox again with previous contenturl.
$.ajax({
        type: 'GET',
        url: returnurl,
        dataType: 'html',
        cache: true,
        beforeSend: function() {
                $('#cboxLoadedContent').empty();
                $('#cboxLoadingGraphic').show();
        },
        complete: function() {
                $('#cboxLoadingGraphic').hide();
        },
        success: function(data) {              
        $('#cboxLoadedContent').empty(); 
                $('#cboxLoadedContent').append(data);
        }
});
});
</script>

有没有办法防止将javascript重新附加到彩盒?我尝试了一些方法(比如用DOM删除它),但似乎没有任何工作......

javascript可能无法禁用,之后应该处理新的网址...

3 个答案:

答案 0 :(得分:2)

尝试在第一行中将live替换为one$('#cboxLoadedContent img[alt="markmessage"]').one('click', function(){

答案 1 :(得分:1)

尝试简单的click事件绑定。在这里,您只将它绑定到选定的元素,而不是绑定到新的元素。如果您希望仅触发一次事件,请使用one

答案 2 :(得分:0)

我不确定您使用的是哪个版本的jQuery,但从1.7开始不推荐live(),您可能想尝试使用on()