单击链接时,event.preventDefault()不起作用

时间:2013-11-14 22:48:32

标签: jquery

我遇到了event.preventDefault()的问题。

所以我正在做的是发送getJSON请求来生成表的主体。所以它会返回这样的东西 <tr><td>......</td><td>2</td></tr> ................等

然后我有一个像这样的表体

<table>
<tbody id="activities_list">
</tbody>
</table>

我将activities_list设置为从ajax请求返回的值。 一切正常,除了event.preventDefault(),它不会阻止点击。因此,当用户点击链接时,他/她仍然被定向到网址。

为什么不阻止违约?请注意,该链接具有“HistoricActivities”类,它们也是由ajax请求生成的。

<script>
    $(function(){

        $('.sub_note').shorten({
            moreText: 'read more',
            lessText: 'read less',
            showChars: '100'
        }); 

        $('.HistoricActivities.dummy_his').on('click', function(event){
            //reset
            event.preventDefault();

            $('#activities_list').html('');
            var pg = getURLParameter('page', null);

            $.getJSON("ajax/loader-display-previos-calls.php", {
                    account_id: <?php echo $account_id; ?>,
                    page: pg
                },function (data) {

                    if ( ! data) 
                    return; 

                    if(data.error === false){       
                        $('#activities_list').html(data.msg); 
                    }


                }
            );
        });

    });
</script>

感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

该元素是动态生成的,您必须使用:

$("#activities_list").on("click", ".HistoricActivities.dummy_his", function(e) { 

    somestuff(); 
    e.preventDefault();

  }
);

答案 1 :(得分:1)

请记住,必须存在元素才能使事件绑定生效。 (也就是说,您尝试在页面加载时添加单击侦听器,而不是在添加html时。)

看起来你正在构建html

$('#activities_list').html(data.msg);

但未将任何点击事件侦听器附加到html元素。

可能是一些东西
$('#activities_list')
    .html(data.msg)
    .find('a.HistoricActivities').click(function(event){
        event.preventDefault();
    });

答案 2 :(得分:0)

如果生成了链接,请确保在绑定“click”事件时,它已存在于dom中并且

$('.HistoricActivities.dummy_his')

实际上选择它。几个老式的

alert('someone clicked me');

应该足够了。

答案 3 :(得分:0)

我终于明白了......这就是我所做的。

创建了一个执行ajax请求的递归函数。

然后在点击链接时调用它。

<script>

function recall(page){
    $.getJSON("ajax/loader-display-previos-calls.php", {
        account_id: <?php echo $account_id; ?>,
        page: page
    },function (data) {

        if ( ! data) 
        return; 

        if(data.error === false){       
            $('#activities_list').html(data.msg).on('click', '.HistoricActivities', function(e) { 
                e.preventDefault();
                recall(getURLParameter('page', this.href));

            });


        }


    }
).done( function(){

    $('.sub_note').shorten({
        moreText: 'read more',
        lessText: 'read less',
        showChars: '100'
    }); 
});

}



    $(function(){


        $('.HistoricActivities.dummy_his').click( function(event){

            event.preventDefault();

            $('#activities_list').html('');

            recall(1);

        });

        $(window).on('load', function(){
            $('.dummy_his').click();
        });
    });
</script>

答案 4 :(得分:-1)

如果.prefentDefault()确实不起作用,您可以尝试在事件处理程序中返回false。那也应该取消这一事件。