Jquery 了解PreventDefault和DefaultPrevented如何处理自定义事件

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)

我只是在这里查看这个引导Jquery代码,在中,我很难理解defaultprevented和preventDefault如何处理自定义事件。请在此处查看引导代码:

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();
    });