JavaScript/jQuery:显示 DIV 直到用户停止在文本框中输入
JavaScript/jQuery: Show DIV until user stops typing in Textbox
我在我的网站上使用了一些文本框(输入类型=文本),我有一个 div,它是隐藏的(显示:none)。
现在我希望用户在其中一个文本框中输入一些文本,恰好在那一刻,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
存储在一个变量中,然后 清除 需要时的超时:
将 mouseenter
替换为 hover
,但无论哪种方式都有效。
注意
.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>
不要在 mouseenter 上使用,而是像这样使用更改:
$(".InfoBox").change(function(){
InfoBoxHovered = true;
});
示例 jsfiddle:http://jsfiddle.net/rec2Ltsm/
我在我的网站上使用了一些文本框(输入类型=文本),我有一个 div,它是隐藏的(显示:none)。
现在我希望用户在其中一个文本框中输入一些文本,恰好在那一刻,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
存储在一个变量中,然后 清除 需要时的超时:
将 mouseenter
替换为 hover
,但无论哪种方式都有效。
注意
.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>
不要在 mouseenter 上使用,而是像这样使用更改:
$(".InfoBox").change(function(){
InfoBoxHovered = true;
});
示例 jsfiddle:http://jsfiddle.net/rec2Ltsm/