1

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

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

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

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

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

为什么它不能防止违约?请注意,该链接有一个类“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>

谢谢你的帮助。

4

5 回答 5

3

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

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

    somestuff(); 
    e.preventDefault();

  }
);
于 2013-11-14T23:03:08.743 回答
1

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

看起来你正在构建 html

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

但没有将任何点击事件侦听器附加到 html 元素。也许类似于

$('#activities_list')
    .html(data.msg)
    .find('a.HistoricActivities').click(function(event){
        event.preventDefault();
    });
于 2013-11-14T22:58:12.607 回答
0

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

$('.HistoricActivities.dummy_his')

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

alert('someone clicked me');

应该足够了。

于 2013-11-14T22:56:50.930 回答
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>
于 2013-11-14T23:53:44.003 回答
-1

如果它真的.prefentDefault()不起作用,你可能只是尝试false在你的事件处理程序中返回。那也应该取消该事件。

于 2013-11-14T22:52:06.077 回答