div父级的preventDefault会阻止输入子进程获得焦点

时间:2016-05-04 18:35:23

标签: javascript jquery

我有一个包含文本输入的div。在该div的mousedown我需要防止默认,但当我点击输入键入某些文本时它不会得到焦点因为div(父)阻止默认。

HTML

<div class="test">
    <input type="text" class="input1" />
</div>

的Javascript

$(".test").on('mousedown', function(e){
    e.preventDefault();
});

有可能解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以为输入添加e.stopPropagation();。它将阻止事件传播到父div

&#13;
&#13;
$(".test").on('mousedown', function(e){
    e.preventDefault();
});
$(".test input").on('mousedown', function(e){
    e.stopPropagation();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="test">
    <input type="text" class="input1" />
</div>
&#13;
&#13;
&#13;

但是如果你使用click事件,那么这不会成为一个问题。事件将被传播,但重点不会丢失。

&#13;
&#13;
$(".test").on('click', function(e){
    e.preventDefault();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="test">
    <input type="text" class="input1" />
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

测试e.target,如果是输入,请不要preventDefault()