我遇到了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>
感谢您的帮助。
答案 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
。那也应该取消这一事件。