如果输入被点击或,如果输入进入焦点,我试图在输入上触发事件。
我遇到的问题是阻止事件在点击上触发两次,因为很明显,点击输入也会使其成为焦点。我已经在jfiddle上放了一个非常宽松的版本来向你展示我的意思,代码如下:
HTML:
<body>
<input type="textbox" name="tb1" class="input1"></input>
<label> box 1 </label>
<input type="textbox" name="tb2" class="input2"></input>
<label> box 2 </label>
</body>
JQuery的
$(function () {
$('.input2').click(function() {
alert("click");
});
$('.input2').focus(function() {
alert("focus");
});
});
JSFiddle :http://jsfiddle.net/XALSn/2/
您会看到,当您选择输入2时,您会收到一条警报,但如果您点击则会获得两条警报。理想情况下,对于我的场景,它需要是一个警报而忽略另一个。它似乎也没有真正关注。
提前感谢任何建议。
答案 0 :(得分:3)
如何在焦点上设置标记,以便我们可以触发焦点并忽略点击,但是还可以监听焦点元素的点击次数?合理?看看demo jsFiddle - 如果您对焦或点击未聚焦的.index2
,它会触发焦点事件并忽略点击。在聚焦时,点击它会触发点击。
我不知道为什么你会想要这个(我想不出任何人想要出于任何原因点击焦点元素(因为克拉已经在场上活动)但是你走了:
$(function () {
$('.input2').on("click focus blur", function(e) {
e.stopPropagation();
if(e.type=="click"){
if($(this).data("justfocussed")){
$(this).data("justfocussed",false);
} else {
//I have been clicked on whilst in focus
console.log("click");
}
} else if(e.type=="focus"){
//I have been focussed on (either by clicking on whilst blurred or by tabbing to)
console.log("focus");
$(this).data("justfocussed",true);
} else {
//I no longer have focus
console.log("blur");
$(this).data("justfocussed",false);
}
});
});
答案 1 :(得分:0)
只需在点击事件
上添加e.preventDefault()即可$(function () {
$('.input2').click(function(e) {
console.log("click");
e.preventDefault();
e.stopPropagation();
});
$('.input2').focus(function() {
console.log("focus");
});
});
如果我理解你的问题,e.prevnetDefault()将阻止浏览器自动关注点击。然后你可以做一些与焦点不同的东西
答案 2 :(得分:0)
这可能不是最佳答案,但这是一种做法。我建议在输入中添加标签索引,并在其他输入模糊模糊时触发焦点事件。
我已经添加到这个小提琴: http://jsfiddle.net/XALSn/9/
$(function () {
$('.input2').click(function(e) {
alert("click");
e.preventDefault();
});
});
$('input').blur(function(){
$('input').focus(function() {
alert("focus");
});
});
答案 3 :(得分:0)
你可以使用我在JS中经常使用的一件事
var doSomething = true;
$(function () {
$('.input2').click(function(e) {
if (doSomething) {
// do something :)
}
doSomething = false;
});
$('.input2').focus(function() {
if (doSomething) {
// do something :)
}
doSomething = false;
});
});
但你必须在mouseout或foucs over等上更改doSomething的值:)
答案 4 :(得分:0)
$(function () {
var hasFocus = false;
$("body")
.off()
.on({
click : function()
{
if(!hasFocus)
{
hasFocus = true;
alert("click");
}
},
focus : function()
{
if(!hasFocus)
{
hasFocus = true;
alert("focus");
}
}
},".input2");
});
尝试设置标志hasFocus并相应地采取行动