如何检测特定元素是否被点击?

How can I detect specific element is clicked?

提问人:Martin AJ 提问时间:1/20/2017 最后编辑:Martin AJ 更新时间:1/21/2017 访问量:178

问:

请按照以下两个步骤操作:

  • 通过单击它来关注input
  • 现在点击button

$("input").on({
    focusout: function() {
    	this.value += "one|";
    }
});

$("button").on("click", function(){
  $old_val = $("input").val();
  $("input").val($old_val+"two|");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<button>Add "two"</button>

结果将是:!好吧,我不想要这个。我想在单击按钮时禁用。我该怎么做?one|two|focusout

执行这两个步骤后的预期结果应该是 。two|

javascript jquery html

评论

6赞 freedomn-m 1/20/2017
FocusOut 发生在按钮单击之前,因此您不能“单击按钮时禁用 FocusOut”,因为它已经触发。
0赞 Martin AJ 1/20/2017
@freedomn-m 我不能在检查下一个事件中设置条件,如果下一个事件单击按钮,则返回 false 吗?iffocusout
2赞 freedomn-m 1/20/2017
您能详细说明您的用例要求吗?你想实现什么(除了“我希望它是”两个|“——为什么要这样?这看起来像一个 XY 问题:你试图通过执行 Y 来解决 X,因此想知道如何解决 Y - 如果我们知道 X 是什么,我们可以提供帮助
1赞 freedomn-m 1/20/2017
例如,为什么 Focusout 会添加 “one|”?这意味着要实现什么?
2赞 Martin AJ 1/21/2017
@freedomn-m 我正在尝试制作一个完全像这样的自动完成框。在我提供的图像中,如果你把焦点放在输入之外,它会为你做一个标签。如果你点击标签,它将只为你创建标签,而不是同时创建标签和标签。javjavajavajavjava

答:

2赞 Chase 1/21/2017 #1

您希望阻止按钮调用默认事件,这是浏览器更改焦点的位置。如果您将其分配给按钮上的事件,则使用将阻止这种情况发生。mousedowne.preventDefault()mousedown

$("input").on({
    focusout: function() {
    	this.value += "one|";
    }
});
$("button").on("mousedown", function(e) {
  e.preventDefault(); 
});
$("button").on("click", function(){
  $old_val = $("input").val();
  $("input").val($old_val+"two|");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<button>Add "two"</button>

评论

0赞 Chase 1/21/2017
我猜你删除了评论,但它并没有禁用焦点......运行代码段并单击输入,然后单击按钮以外的任何位置
1赞 freedomn-m 1/21/2017
这样做的目的是通过在聚焦之前触发点击来有效地改变事件的顺序,从而允许 OP 添加代码来删除聚焦......或:)的东西
0赞 Martin AJ 1/21/2017
@freedomn-m 是的.这是个好主意,不是吗?;-)