jquery 的事件顺序

发布于 2024-11-25 08:25:30 字数 996 浏览 1 评论 0原文

我有以下情况:

您可以在其中输入关键字的文本框。 keyup 事件触发一个 AJAX 脚本,该脚本在数据库中查找类似的关键字。找到后,DIV 将与找到的关键字一起可见 (show())。

当单击 div 中的关键字之一时,所选关键字将被写入文本框中,并且 div 将被隐藏 (hide())。

但是,当 DIV 可见并且我单击表单中的其他位置或按 Tab 键移出文本框(焦点事件)时,我希望隐藏 DIV。

这可以通过 focusout 事件来完成。但是,当我使用 click 事件注册 DIV 中关键字的点击并使用 focusout 事件注册 focusout 事件时,会出现以下问题:当单击 div 中的关键字时,将触发 focusout 事件,因此我的 DIV 将被触发隐藏,但关键字不会复制到文本框中。

我目前有以下代码:

/*click on found "link with class f_link" in DIV*/
$(".f_link").live('click', function(){

    $newval=$(this).attr("id");
    $("#textbox_id").val($newval);
    $("#searchresults").hide();
})


/*when losing focus textbox hide DIV */
$("#textbox_id").focusout(function(){
    $("#searchresults").hide();

})

解释:

#textbox_id : id of textbox
#searchresults: id of DIV with found results
.f_link : class of "link" in div searchresults like <span class="f_link" id="result1>result 1</span>

I have the following situation:

Textbox where you can type a keyword. The keyup event triggers an AJAX script which looks in the database for similar keywords. When found a DIV will be visible (show()) with the found keywords.

When clicking on one of the keywords in the div the selected keyword will be written in the textbox and the div will be hidden (hide()).

But when the DIV is visible and I click somewhere else in the form or I tab out of the textbox (the focusout event) I would like the DIV to be hidden.

This could be done with the focusout event. But when I use the click event for registering the click on a keyword in the DIV and using the focusout event for registering the focusout event the following problem occurs: When clicking the keyword in the div the focusout event will be triggered so my DIV will be hidden but the keyword will not be copied to the textbox.

I currently have the following code:

/*click on found "link with class f_link" in DIV*/
$(".f_link").live('click', function(){

    $newval=$(this).attr("id");
    $("#textbox_id").val($newval);
    $("#searchresults").hide();
})


/*when losing focus textbox hide DIV */
$("#textbox_id").focusout(function(){
    $("#searchresults").hide();

})

explaination:

#textbox_id : id of textbox
#searchresults: id of DIV with found results
.f_link : class of "link" in div searchresults like <span class="f_link" id="result1>result 1</span>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星光不落少年眉 2024-12-02 08:25:30

尝试:

/*when losing focus textbox hide DIV */
$("#textbox_id").blur(function(){
    $("#searchresults").hide();
})

Try:

/*when losing focus textbox hide DIV */
$("#textbox_id").blur(function(){
    $("#searchresults").hide();
})
哭泣的笑容 2024-12-02 08:25:30

模糊不起作用(focusout也是jquery中的一个事件..)

我用这个解决方案管理它:

$(".f_link").live('click', function(){
    $("#textbox_id").val($newval=$(this).attr("id"));
    $("#searchresults").hide();
})

$mouseover=false;
$("#searchresults").live('mouseover', function(){
    $mouseover=true;
})

$("#searchresults").live('mouseout', function(){
    $("#textbox_id").focus();
    $mouseover=false;
})



$("#textbox_id").focusout(function(){
    if ($mouseover) {
        return;
    }
    $("#searchresults").hide();
})

Blur didn't work (focusout is an event in jquery as well..)

I managed it with this solution:

$(".f_link").live('click', function(){
    $("#textbox_id").val($newval=$(this).attr("id"));
    $("#searchresults").hide();
})

$mouseover=false;
$("#searchresults").live('mouseover', function(){
    $mouseover=true;
})

$("#searchresults").live('mouseout', function(){
    $("#textbox_id").focus();
    $mouseover=false;
})



$("#textbox_id").focusout(function(){
    if ($mouseover) {
        return;
    }
    $("#searchresults").hide();
})
乜一 2024-12-02 08:25:30

您可以使用模糊功能代替焦点...

$("#textbox_id").live('blur',function(){
     $("#searchresults").hide();
})

You can use blur function istead of focusout...

$("#textbox_id").live('blur',function(){
     $("#searchresults").hide();
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文