如何触发 focusout 事件
How to trigger focusout event
我有一个焦点事件
$('.alpha').on("focusout", function () {...});
我想从代码中的其他地方触发它。
我试过了$('#input12').focus().blur();
也试过 $('#input12').trigger("focusout")
编辑:我正在使用动态生成的元素。
但运气不好...
元素 #input12
具有 class 名称 alpha
所以我希望触发 focusout 事件。
有什么方法可以完成吗?
这是我尝试做的时候的 jsfiddle 示例 https://jsfiddle.net/jnmnk68d/
在 jQuery 元素上使用 [0]
有效! kontrollanten 选项也适用!并且也在 focusout
上进行正常触发!
$(".alpha").on("focusout", function(e){
console.log(e.type, true);
});
//option 1
$('#input12')[0].focus(); //vanilla
$('#input12')[0].blur(); //vanilla
//option 2
$('#input12').trigger('focusout');
//option 3
$('#input12').trigger('blur');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="alpha" id="input12" />
这是一个取自 jQuery 文档的工作示例。
var focus = 0,
blur = 0;
$("p")
.focusout(function() {
focus++;
$("#focus-count").text("focusout fired: " + focus + "x");
})
.inputs {
float: left;
margin-right: 1em;
}
.inputs p {
margin-top: 0;
}
<html lang="en">
<head>
<meta charset="utf-8">
<title>focusout demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div class="inputs">
<p>
<input type="text"><br>
<input type="text">
</p>
</div>
<div id="focus-count">focusout fire</div>
</body>
</html>
也许如果您添加完整的代码我可以提供更好的帮助?
希望对您有所帮助!
看这段代码,它会在焦点发生1秒后调用focusout。
$('.alpha').on("focusout", function() {
console.log('FOCUSOUT!');
});
$('.alpha').on("focus", function() {
var self = $(this);
window.setTimeout(function() {
self.focusout();
}, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input type="text" class="alpha" />
您需要将事件委托给非动态父元素。
在此示例中,我们在 form
上侦听 focusout
事件,但仅当事件的目标与选择器匹配时才触发我们的函数(在本例中为 ".alpha"
)。这样就可以在现在或将来匹配的任何元素上触发事件。
$("form").on("focusout", ".alpha", function() {
console.log("focusout happened!");
});
这是一个完整的演示,让您了解我们如何使用委托事件触发动态插入内容的事件。
$(function() {
$("form").on("focusout", ".alpha", function(e) {
console.warn("focusout triggered on " + e.target.outerHTML);
});
//example trigger
//click the link to trigger the event
$("a").on("click", function(e) {
e.preventDefault();
$("#input12").trigger("focusout");
});
//demo injecting content
//click the create button then focus out on the new element to see the delegated event still being fired.
var i = 12;
$("form").on("submit", function(e) {
e.preventDefault();
var id = "input" + (++i);
$(this).find("fieldset").append("<input id='" + id + "' class='alpha' placeholder='" + id + "' />");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<fieldset>
<input id="input12" class="alpha" placeholder="input12" />
<input type="submit" value="create new" />
</fieldset>
</form>
<a href="#">trigger on input12</a>
我发现我的代码似乎有问题..
首先,我将我的事件更改为使用委托,并将它连接到一个非动态元素(不是动态添加的元素),正如此处建议的那样。
我还需要在 setTimeout 中调用触发函数,因为事实证明渲染动态添加的元素需要一段时间,所以使用 setTimeout 就可以了。
谢谢大家的帮助!
我有一个焦点事件
$('.alpha').on("focusout", function () {...});
我想从代码中的其他地方触发它。
我试过了$('#input12').focus().blur();
也试过 $('#input12').trigger("focusout")
编辑:我正在使用动态生成的元素。
但运气不好...
元素 #input12
具有 class 名称 alpha
所以我希望触发 focusout 事件。
有什么方法可以完成吗?
这是我尝试做的时候的 jsfiddle 示例 https://jsfiddle.net/jnmnk68d/
在 jQuery 元素上使用 [0]
有效! kontrollanten 选项也适用!并且也在 focusout
上进行正常触发!
$(".alpha").on("focusout", function(e){
console.log(e.type, true);
});
//option 1
$('#input12')[0].focus(); //vanilla
$('#input12')[0].blur(); //vanilla
//option 2
$('#input12').trigger('focusout');
//option 3
$('#input12').trigger('blur');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="alpha" id="input12" />
这是一个取自 jQuery 文档的工作示例。
var focus = 0,
blur = 0;
$("p")
.focusout(function() {
focus++;
$("#focus-count").text("focusout fired: " + focus + "x");
})
.inputs {
float: left;
margin-right: 1em;
}
.inputs p {
margin-top: 0;
}
<html lang="en">
<head>
<meta charset="utf-8">
<title>focusout demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div class="inputs">
<p>
<input type="text"><br>
<input type="text">
</p>
</div>
<div id="focus-count">focusout fire</div>
</body>
</html>
也许如果您添加完整的代码我可以提供更好的帮助?
希望对您有所帮助!
看这段代码,它会在焦点发生1秒后调用focusout。
$('.alpha').on("focusout", function() {
console.log('FOCUSOUT!');
});
$('.alpha').on("focus", function() {
var self = $(this);
window.setTimeout(function() {
self.focusout();
}, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input type="text" class="alpha" />
您需要将事件委托给非动态父元素。
在此示例中,我们在 form
上侦听 focusout
事件,但仅当事件的目标与选择器匹配时才触发我们的函数(在本例中为 ".alpha"
)。这样就可以在现在或将来匹配的任何元素上触发事件。
$("form").on("focusout", ".alpha", function() {
console.log("focusout happened!");
});
这是一个完整的演示,让您了解我们如何使用委托事件触发动态插入内容的事件。
$(function() {
$("form").on("focusout", ".alpha", function(e) {
console.warn("focusout triggered on " + e.target.outerHTML);
});
//example trigger
//click the link to trigger the event
$("a").on("click", function(e) {
e.preventDefault();
$("#input12").trigger("focusout");
});
//demo injecting content
//click the create button then focus out on the new element to see the delegated event still being fired.
var i = 12;
$("form").on("submit", function(e) {
e.preventDefault();
var id = "input" + (++i);
$(this).find("fieldset").append("<input id='" + id + "' class='alpha' placeholder='" + id + "' />");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<fieldset>
<input id="input12" class="alpha" placeholder="input12" />
<input type="submit" value="create new" />
</fieldset>
</form>
<a href="#">trigger on input12</a>
我发现我的代码似乎有问题.. 首先,我将我的事件更改为使用委托,并将它连接到一个非动态元素(不是动态添加的元素),正如此处建议的那样。 我还需要在 setTimeout 中调用触发函数,因为事实证明渲染动态添加的元素需要一段时间,所以使用 setTimeout 就可以了。
谢谢大家的帮助!