输入焦点警报,没有类别或ID,并且在Div内

时间:2011-10-13 01:50:55

标签: javascript jquery html input focus

如果输入聚焦,我如何在以下HTML代码中提醒消息:

<div class="ss_datesel_inp_cont">
    <div class="ss_datesel_inp_right_corner"> </div>
    <input autocomplete="off">
</div>

这是我尝试但没有效果:

$(".ss_datesel_inp_cont:input").click(function() {
    alert("focused");
});

// or

$(".ss_datesel_inp_cont:input").focus(function() {
    alert("focused");
});

//or 

$(".ss_datesel_inp_cont").find("input").focus(function() {
    alert("focused");
});

2 个答案:

答案 0 :(得分:2)

:input选择器仅在给定元素是输入(也是textarea,select和其他)时才起作用。 .ss_datesel等等类不在输入上,而是在div上。您只需使用后代选择器:

$(".ss_date_etc input").click(function() { alert('focused'); });

但是,这仅在单击输入时才有效。如果您通过Tab键或自动对焦,则不会发出警报。问题是,如果您使用.focusalert()会窃取焦点,然后在某些浏览器中重新应用它,您将陷入焦点循环。这是一个简单的解决方案:

$(".ss_date_etc input").focus(function () {
   if (!$(this).data('focused')) {
      $(this).data('focused', true);
      alert('focus!');
   }
});

请注意,即使您尝试强制使用警报,并非所有浏览器都会在警报后恢复焦点。您可能希望使用alert的替代方法,尤其是因为这对用户来说真的很烦人。

您还可以在模糊时将.data('focused')更新为false,以便再次发生这种情况。

答案 1 :(得分:1)

你的jQuery选择器出错了。这应该有效:

$(".ss_datesel_inp_cont input").focus(function() {
    alert("focused");
});

此外,您的输入未正确设置...虽然“text”是默认输入类型,但您应始终在输入中指定类型:

<input type="text" autocomplete="off" />

有趣的是,你的第三次尝试似乎在我的测试中起作用。祝你好运。