JavaScript/jQuery : Show DIV until user stops typing in Textbox

标签 javascript jquery web effects

我在我的网站上使用了一些文本框(输入类型=文本),并且我有一个 div,它是隐藏的(显示:无)。

现在我希望用户在其中一个文本框中输入一些文本,就在那一刻,当用户停止添加文本时,div 应该出现几秒钟并隐藏。 div 还应该等待,直到用户停止将鼠标悬停在 div 上。我真的很努力,但没能正确完成。

这是一个 JSFIDDLE 示例来说明我的意思:

var InfoBoxHovered = false;

$(".TextBox1").on("input", function() {
    $(".InfoBox").fadeIn();
    setTimeout(function () {
        $(".InfoBox").fadeOut();
    }, 3000);
 });

$(".TextBox2").on("input", function() {
    $(".InfoBox").fadeIn();
    if (!InfoBoxHovered){
        setTimeout(function () {
            $(".InfoBox").fadeOut();
        }, 3000);
    }
 });

$(".InfoBox").mouseenter(function(){
    InfoBoxHovered = true;
})
$(".InfoBox").mouseleave(function(){
    InfoBoxHovered = false;
})

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //

//The INFOBOX-DIV should APPEAR, when the user enters some text
//The INFOBOX-DIV should DISAPPEAR, 3 SECONDS AFTER THE USER STOPPED ENTERING TEXT
//The Infobox-Div should not disappear after 3 seconds and appear again - it should stay until the user finished entering text and then wait 3 seconds before it fades out
//The InfoBox-div should be visible, as long as the user hovers the div and should then fade out, if the 3 seconds are over
.Main{
    background-color: lightgrey; min-width: 100%; min-height: 200px; text-align: center;
}
.Header{
    font-family: Arial; color: red; font-size: 18px; font-weight: bold;
}
.InfoBox{
    position: fixed; left:0; right:0;background: rgba(0,0,0,.75); z-index: 20; bottom: 20px;
    margin: 0 auto; width: 500px; height: 80px; border-radius: 4px; text-align: center;
    color: white; padding: 15px; font-family: Arial; display: none;
}
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<div class="Main">
    <br/>
    <span class="Header">Input-Fields</span>
    <br/><br/>
    <input type="text" name="title1" placeholder="Enter Some Text" class="TextBox TextBox1"/>
    <input type="text" name="titlew" placeholder="Enter Some Text" class="TextBox TextBox2"/>
</div>

<div class="InfoBox">
    Information
</div>

我尽了最大努力使用不同的功能,如“delay”或“setTimeout”,甚至用“SetInterval”每隔几秒检查一次......但没有任何效果。我尝试在 JSFiddle 的 JavaScript-Field 中解释更多细节。

提前致谢。

最佳答案

您所要做的就是将 setTimeout 存储在变量中,然后在需要时清除该超时:

hover 替换了 mouseenter,但无论哪种方式都可以工作。

注意
.InfoBox 元素最初是不可见的,因此当它出现在鼠标指针下方时,在鼠标指针移动之前它不会悬停。

// declare timer variable which holds the timeout:
var timer;

$(".TextBox1").on("input", function() {
    $(".InfoBox").fadeIn();
    // clear the timer if it's already set:
    clearTimeout(timer);
    timer = setTimeout(function () {
        $(".InfoBox").fadeOut();
    }, 3000);
 });

$(".TextBox2").on("input", function() {
    $(".InfoBox").fadeIn();
    // clear the timer if it's already set:
    clearTimeout(timer);
    timer = setTimeout(function () {
        $(".InfoBox").fadeOut();
    }, 3000);
 });

$(".InfoBox").hover(function(){
    // clear the timer on hover, so that the box won't disapear:
    clearTimeout(timer);
}, function(){
    // set the timer again when mouse is outside of the box:
    timer = setTimeout(function () {
        $(".InfoBox").fadeOut();
    }, 3000);
});
.Main{
    background-color: lightgrey; min-width: 100%; min-height: 200px; text-align: center;
}
.Header{
    font-family: Arial; color: red; font-size: 18px; font-weight: bold;
}
.InfoBox:hover{
    background: rgba(0,0,0,.9);
}
.InfoBox{
    position: fixed; left:0; right:0;background: rgba(0,0,0,.75); z-index: 20; bottom: 20px;
    margin: 0 auto; width: 500px; height: 80px; border-radius: 4px; text-align: center;
    color: white; padding: 15px; font-family: Arial; display: none;
}
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<div class="Main">
    <br/>
    <span class="Header">Input-Fields</span>
    <br/><br/>
    <input type="text" name="title1" placeholder="Enter Some Text" class="TextBox TextBox1"/>
    <input type="text" name="titlew" placeholder="Enter Some Text" class="TextBox TextBox2"/>
</div>

<div class="InfoBox">
    Information
</div>

关于JavaScript/jQuery : Show DIV until user stops typing in Textbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317797/

相关文章:

javascript - 使用 Vue 和 JS 下载 CSV 文件

javascript - 将 2 个 JavaScript 变量的内容交换为另一个

jquery - 从 jQuery 成功进行 AJAX 调用时检索 glyphicons-halflings-regular.woff2 时出错

html - 放大时元素变大

asp.net - 页面不会填满浏览器的高度

javascript - 在 JSP 转发之前显示 JavaScript 警报

javascript - 如何检测数组中的元素是否为一个字符长并且与另一个数组中的任何元素的第一个字符匹配

javascript - jQuery Toggle 无法正常工作并且混合了动画

javascript - 如何将 jQuery 嵌入到 html 页面中?

apache - 在 apache 目录外加载图像