允许目标事件的默认操作并阻止父项的默认操作

时间:2013-08-15 13:04:30

标签: javascript jquery

我们有这种标记:

<a href="#">
   <input type="file" />
</a>

默认情况下,当您点击输入时,会出现“选择文件”窗口,并且位置会更改为“#”。如何防止浏览器更改位置?

我尝试过:

//location still changes
$('input').bind('click', function (e) {
  e.stopPropagation();
});

//prevents "Select file" window
$('input').bind('click', function (e) {
  e.preventDefault();
});

//prevents "Select file" window 
$('a').bind('click', function (e) {
  e.preventDefault();
});

2 个答案:

答案 0 :(得分:1)

尝试将$(e)更改为e.

e.preventDefault();

执行$(e).preventDefault()时会导致错误

Uncaught TypeError: Object [object Object] has no method 'preventDefault' 

答案 1 :(得分:0)

您需要检查用户是否单击了a元素而不是输入文件。这应该有用。

$('a').click(function(e) {
    if ($(e.target).is('a')) {
        e.preventDefault();
    }
});

<强> DEMO