Jquery 了解PreventDefault和DefaultPrevented如何处理自定义事件
我只是在这里查看这个引导Jquery代码,在中,我很难理解defaultprevented和preventDefault如何处理自定义事件。请在此处查看引导代码:Jquery 了解PreventDefault和DefaultPrevented如何处理自定义事件,jquery,Jquery,我只是在这里查看这个引导Jquery代码,在中,我很难理解defaultprevented和preventDefault如何处理自定义事件。请在此处查看引导代码: var relatedTarget = $next[0] var slideEvent = $.Event('slide.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) this.$element.trigger(slideEvent)
var relatedTarget = $next[0]
var slideEvent = $.Event('slide.bs.carousel', {
relatedTarget: relatedTarget,
direction: direction
})
this.$element.trigger(slideEvent)
if (slideEvent.isDefaultPrevented()) return
请参见此处的检查如果(slideEvent.isDefaultPrevented())返回
基本上我不明白如何将isDefaultPrevented())
用于自定义事件,我尝试在此处创建演示:
var slideEvent = $.Event('slide');
$('a').on('click' , function(e){
e.preventDefault();
$(this).trigger(slideEvent);
})
$('a').on('slide' , function(e){
e.preventDefault();
})
if (slideEvent.isDefaultPrevented()) {
console.log('is default prevented');
}
但不知何故,下面的代码块从来都不是console.log:
if (slideEvent.isDefaultPrevented()) {
console.log('is default prevented');
}
也许我做得不对。有人能解释一下吗?我想做的就是了解PreventDefault()和DefaultPrevented如何处理自定义事件,并且我想要一个工作演示,以便更好地理解
下面是我尝试过的一个-preventDefault();是一个函数,它使您禁用元素的默认事件,如
<a href="http://example.com"></a>
<script>$(function(){
$('a').preventDefault();
});</script>
$(函数(){
$('a').preventDefault();
});
当您在加载页面时单击该链接时,它不会将您重定向到该页面。
但是isDefaultPrevented();将检查默认事件是否已禁用。我认为您是从用户的角度来看它的。您应该从开发人员的角度来考虑它。考虑下面的例子。在本例中,我们为用户提供以下功能:
让我们定义我们的插件
$('a').on('click', function (e) { // As per our feature we will act on clicking a href
var slideEvent = $.Event('slide'); // lets create our custom event
e.preventDefault(); // of course we don't like hrefs
$(this).trigger(slideEvent); // We should throw a slide event when the link is clicked
if (slideEvent.isDefaultPrevented()) { // but if the user does not want to see our default event, they will preventDefault and we should stop our feature
alert('is default prevented');
return;
}
alert('clicked on href'); // our default feature is to display alert.
});
现在如何使用此功能
在这种情况下,用户选择使用默认功能,然后单击href
在这种情况下,用户选择定义自定义功能,因此使用e.preventDefault
。(在isDefaultPrevented()
完整示例:
$('a').on('click', function (e) {
var slideEvent = $.Event('slide');
e.preventDefault();
$(this).trigger(slideEvent);
if (slideEvent.isDefaultPrevented()) {
alert('is default prevented');
return;
}
alert('clicked on href');
})
$('#case1').on('slide', function (e) {
// e.preventDefault();
});
$('#case2').on('slide', function (e) {
e.preventDefault();
});
$('a')。在('click')上,函数(e){
var slideEvent=$.Event('slide');
e、 预防默认值();
$(this).trigger(slideEvent);
if(slideEvent.isDefaultPrevented()){
警报(“是默认阻止的”);
返回;
}
警报('clicked on href');
})
$('#case1')。关于('slide',函数(e){
//e.预防违约();
});
$('#case2')。关于('slide',函数(e){
e、 预防默认值();
});代码>
a{
字号:3em;
文字装饰:无;
}
@A.Wolff是的!现在可以正常工作了,但即使在引导代码中,e.DefaultPrevented()也与e.preventDefault()不在同一块中:你能解释一下那里发生了什么事吗?请看这里,我删除了评论,因为它与这个插件为什么使用它无关。但我想,这是为了处理开发人员想要特别防止默认行为的情况,即。。。我不知道,对不起:(我的意思是:@A.Wolff谢谢你的尝试,我会检查你的小提琴!
$('#case2').on('slide', function (e) {
e.preventDefault();
});
$('a').on('click', function (e) {
var slideEvent = $.Event('slide');
e.preventDefault();
$(this).trigger(slideEvent);
if (slideEvent.isDefaultPrevented()) {
alert('is default prevented');
return;
}
alert('clicked on href');
})
$('#case1').on('slide', function (e) {
// e.preventDefault();
});
$('#case2').on('slide', function (e) {
e.preventDefault();
});