输入焦点取决于更大的父元素与 jQuery
Input focus depending on bigger parent element with jQuery
我想用jQuery做输入验证。每次用户模糊输入时,都应对其进行验证。验证不是问题,而是重点部分。
某些输入嵌入在较大的父元素中。父元素应该是焦点输入和焦点输出事件的指示器。换句话说:如果用户单击输入的父元素,它应该聚焦输入。
下面是一个演示:
在jsFiddle上的演示
在演示中,第一个输入被一个可单击的ul
包围,并导致基础输入聚焦。第二个输入被一个不执行任何操作的div
包围。观看控制台以获取输出。
这是从演示中获取的标记。HTML:
<ul>
<li>
<input type="text" class="embed" />
</li>
</ul>
<div>
<input type="text" class="normal" />
</div>
JavaScript:
$('input').focusin(function(event) {
console.log('input.' + $(this).attr('class') + ' focusin');
});
$('input').focusout(function(event) {
console.log('input.' + $(this).attr('class') + ' focusout');
// either here or in blur:
// now i want to do some validation and display errors if there are any
});
$('input').blur(function(event) {
console.log('input.' + $(this).attr('class') + ' blur');
// either here or in focusout:
// now i want to do some validation and display errors if there are any
});
$('ul').click(function(event){
console.log('ul click');
$('input.embed').focus();
});
目前这些是我的问题和问题:
- 单击嵌入式
input
时,它还会触发ul
单击事件,这是我不想要的。在这种情况下,如何检测输入是否被直接单击? - 如果嵌入的
input
已经聚焦,并且我单击父ul
,它会触发input
的focusout事件(这将触发验证),并立即再次聚焦,因为ul
单击处理程序。怎么能检测到这一点,却什么都不做?因为事实上,从用户的角度来看,重点并没有改变。 blur
和focusout
有什么区别?
对于您的第一个问题:
$('ul input.embed').click(function(event){
event.stopPropagation();
});
对于您的第三个问题,来自jQuery
api 文档:
当元素或任何元素时,将焦点事件发送到该元素 在里面,失去焦点。这与 它支持检测父元素的焦点丢失(在 换句话说,它支持事件冒泡)。
相关文章:
- 可以't附加html元素jquery
- 循环遍历元素jquery选择器
- 在ajax加载的元素jquery上包含现有的jquery函数
- 如何删除元素列表中的类并添加到另一个元素 Jquery.
- 获取单击的类元素 jQuery 的名称值
- 获取上一个元素 jQuery 的内容
- 根据另一个元素的更改获取一个元素(jquery)
- 区分不同的可拖放元素(jQuery 拖放)
- 除了最后一个<td>元素-Jquery
- 获取子元素jQuery的单选按钮值
- 捕获元素jquery外部的mousedown事件
- .append到非DOM元素jQuery
- 获取其父元素的精确子元素.Jquery
- 获取重复结构中的特定元素jquery
- 捕获隐藏输入元素jQuery的值
- 使用onclick函数获取点击的元素jquery
- 返回父元素 jquery 中的输入值
- 按属性查找元素 jQuery
- 选择元素 jQuery
- 按子元素 - jQuery 的数据 ID 对 li 进行排序