Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击时禁用父事件,但允许子事件维护自己的事件_Javascript_Jquery_Preventdefault_Stoppropagation - Fatal编程技术网

Javascript 单击时禁用父事件,但允许子事件维护自己的事件

Javascript 单击时禁用父事件,但允许子事件维护自己的事件,javascript,jquery,preventdefault,stoppropagation,Javascript,Jquery,Preventdefault,Stoppropagation,我有大的上传表单,用户可以在这里拖放图片。但当图像被加载时,我会显示按钮,点击按钮会链接到某个页面。但该元素没有加载下一页,而是打开文件选择窗口(其父默认行为) 所以我在检查,如果事件有类,如果它是真的,我使用e.preventDefault() 这样做效果更好(我没有点击链接时的图像选择窗口,但这个链接也不起作用-每个事件都被禁用)我的问题是,我现在如何启用链接 // jFiler is a parent - upload form, with event - on click it open

我有大的上传表单,用户可以在这里拖放图片。但当图像被加载时,我会显示按钮,点击按钮会链接到某个页面。但该元素没有加载下一页,而是打开文件选择窗口(其父默认行为)

所以我在检查,如果事件有类,如果它是真的,我使用
e.preventDefault()

这样做效果更好(我没有点击链接时的图像选择窗口,但这个链接也不起作用-每个事件都被禁用)我的问题是,我现在如何启用链接

// jFiler is a parent - upload form, with event - on click it opens window for file choose - like input field.
$(document).on('click', '.jFiler', function(e) {
    if ($(event.target).hasClass("jFiler-input-done-btn"))  {
        e.stopPropagation();
        e.preventDefault();
    }
});

$('.jFiler-input-done-btn').on('click',function(e) {
    // Test works, but this is a link, and it cannot link to another page now...
    alert ('test')
});

在父级
单击
事件中,使用
e.stopPropagation()
e.preventDefault()
中断链接执行。您只需在那里返回
true

$(document).on('click', '.jFiler', function(e) {
    if( $(event.target).hasClass("jFiler-input-done-btn") ) {
        return true;
    }
});

只需重定向到已附加的click事件中的其他页面:

$('.jFiler-input-done-btn').on('click',function(e) {
    windows.location.href = $(this).attr('href');
});

//OR also

$('.jFiler-input-done-btn').on('click',function(e) {
    e.stopPropagation();
});

希望这有帮助。

只需使用
e.stopPropagation()不需要
e.preventDefault()。因为它会阻止链接操作。
警报('test')
到达??我不太理解问题,也不太理解什么有效,什么无效。您能为我们提供有关测试的更多信息吗?警报('test')已到达..jFiler单击打开上载窗口:。在内部我已放置元素('.jFiler input done btn)-单击此元素时,应链接到另一个页面,但单击时,将触发父元素(打开窗口以选择要上载的文件)-单击此按钮时,应链接到另一个页面,而不是打开窗口进行上载。其工作原理类似于e.stopPropagation();,但正如我在上面所评论的,它现在可以工作了(链接转到另一个页面),但是上传和选择窗口会持续1秒。看起来像是触发了父事件,但链接也起作用,所以我只在加载新页面时才看到此窗口。您能否向我们显示整个
$(文档)。在('click','.jFiler',函数(e){})函数?是的,我知道重定向,但它是更大的应用程序的一部分,在最好的情况下,这应该由纯html完成。但谢谢你的好主意。这是可能的,这段代码解决了问题吗?对我来说很好,现在点击按钮,父事件不会被触发…?$('.jFiler输入完成btn')。点击('click',函数(e){e.stopPropagation();});是的,这是真的链接的内部单击事件
。jFiler input done btn
也应该起作用。