专注于输入触发'焦点'和'选择'事件
问题描述:
我正在写一个严格限制事件的JavaScript脚本。我必须对“焦点”事件执行一些说明,并对“选择”事件进行一些不同的说明。 令我惊讶的是,我发现以编程方式给予焦点,也会引发'选择'事件!这是一个很大的问题。 你能告诉我为什么会发生这种情况,如果我可以通过编程方式阻止选择事件,那么只有当我以编程方式给焦点时?专注于输入触发'焦点'和'选择'事件
请看下面的例子。当点击'给焦点'按钮时,控制台将会写'你选择了一些东西'!
谢谢
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<input id="field" type="text" />
<a href="#" id="btn">Give focus</a>
<script>
$(document).ready(function() {
$('#field').on('select', function(e) {
console.log('You selected something');
});
$('#btn').on('click', function(e) {
$('#field').focus();
})
});
</script>
</body>
</html>
答
试试这个:
$(document).ready(function() {
$('#field').on('select', function(e) {
console.log('You selected something');
});
$('#btn').click(function(e) {
$('#field').focus();
})
});
<input id="field" type="text" />
<a href="#" id="btn">Give focus</a>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
+0
这不会改变任何东西 – user2029958
我认为,这两个事件是工作一样,'select'或'点击'。一旦fire'focus()',它会自动激发'select'事件。我认为不需要2个事件。我认为只有“点击”就足够了。 – Samir
这不是重点。我需要两个不同的事件监听者。我必须在“点击”事件上做一些与“选择”事件不同的事情。所以我需要他们两个。问题在于避免搞砸两个事件。 – user2029958
让我们考虑你需要2个不同的事件用于不同的目的。但要选择输入字段,您需要点击它。因此它会一次激发2个事件'select'和'click'。这是我的理解。 – Samir