如果用户在输入字段中单击,则jQuery停止setTimeout

Bru*_*Kos 14 jquery input

我有以下jQuery函数:

   <script type="text/javascript">
  $(function() {
// setTimeout() function will be fired after page is loaded
// it will wait for 5 sec. and then will fire
// $("#successMessage").hide() function
setTimeout(function() {
    $("#subscribe-floating-box").animate({"height": "toggle"}, { duration: 300 });
}, 3000);
});
</script>

<script type="text/javascript">
   function ShowHide(){
   $("#subscribe-floating-box").animate({"height": "toggle"}, { duration: 300 });
}
</script>
Run Code Online (Sandbox Code Playgroud)

我也有以下形式:

<div id="subscribe-floating-box">
<form action="" method="post" accept-charset="utf-8" id="subscribe-blog">
<input type="text" name="email" style="width: 95%; padding: 1px 2px" value="someone@example.com" id="subscribe-field" onclick="if ( this.value == 'Email Address' ) { this.value = ''; }" onblur="if ( this.value == '' ) { this.value = 'Email Address'; }">
<input type="hidden" name="action" value="subscribe">
<input type="hidden" name="source" value="http://example.com">
<input type="hidden" name="redirect_fragment" value="blog_subscription-2">
<input type="submit" value="Subscribe" name="jetpack_subscriptions_widget">
</form>
</div>
Run Code Online (Sandbox Code Playgroud)

最后,还有一个打开表单的"按钮"(图像).那个按钮有这个代码:

<a href="#" title="" onClick="ShowHide(); return false;" class="cart-buttom"><img src="<?php echo get_template_directory_uri(); ?>/library/images/email-signup-button.png" style="position:relative; top:-146px;" /></a>
Run Code Online (Sandbox Code Playgroud)

(请忽略内联CSS - 这是我的工作草案).

换句话说,我有一个电子邮件注册按钮,可以打开订阅表单.此表单最初显示,但是在setTimeout函数的3000个间隔后关闭,如果用户单击email-signup-button.png图像则回调.点击后回拨后,3000后将不再自动隐藏.

我需要的是:如果观众在电子邮件输入字段内点击,是否可以停止setTimeout功能?他不必开始输入任何内容,只需点击内部即可.如果他决定将电子邮件地址放入,我不希望该表格关闭.虽然一旦有人在访问该网站时立即去写她/他的电子邮件,我不想消除这种可能性.

wee*_*HIS 47

你需要捕获它的id setTimeout并清除它:

var id = setTimeout(function(){alert('hi');}, 3000);
clearTimeout(id);
Run Code Online (Sandbox Code Playgroud)

这个的实现看起来像这样:

var timeoutId = setTimeout(function() {
  $("#subscribe-floating-box").animate({"height": "toggle"}, { duration: 300 });
}, 3000);

$('#subscribe-field').focus(function(){
  clearTimeout(timeoutId);
});
Run Code Online (Sandbox Code Playgroud)

  • 你永远不应该用字符串作为参数调用`setTimeout`!那使用魔鬼`eval()`!相反,你的代码应该是`setTimeout(function(){alert("hi");},3000)` (3认同)