我想每10秒重新加载一次页面,除非有人在页面上的文本框中输入内容。显然,我不想在用户键入时刷新。
我知道我可以通过以下方式重新加载页面:
setTimeout(function () {
window.location.reload(1);
}, 10000);
我想我可以检查输入中是否有任何值,但这似乎也不起作用。
setTimeout(function () {
if ($("input").val == null) {
setTimeout(function () {
window.location.reload(1);
}, 10000);
}
}, 10000);
答案 0 :(得分:2)
此解决方案的一个问题是此行:
if ($("input").val == null) { ...
在jQuery .val
中实际上是一种方法。尝试将其作为方法调用:
if (!$("input").val()) { ...
还要注意在!
之前使用$("input").val()
。在jQuery中,没有值的输入将返回一个空字符串。
在JavaScript中,空字符串被视为“假”-大致等同于false
。通过否定一个假值,当输入字段为空时,代码中的if
条件将得到满足
一个完整的解决方案可能就是这样简单:
setTimeout(function() {
if (!$("input").val()) {
window.location.reload(1);
}
}, 10000);
答案 1 :(得分:1)
这里是修改后的代码及其注释。
首先,如果要表示不同的输入,则应准确使用jQuery选择器来选择它,例如$('#input')
或$('input:eq(0)')
。
第二,使用!$('#input').val()
进行检查。因为如果jQuery选择器未选择任何元素,则val()
函数将返回undefined
而不是''
空字符串。
如果有任何问题,请告诉我。
// setInterval should fit your situation.
var timeout = setInterval(function() {
//if ($("input").val == null) {
// check if the input value is falsy, note that $().val is a function
if (!$("input").val()) {
// you checked the value per 10 seconds, no need to wait another 10 seconds when you checked the value is falsy.
// setTimeout(function() {
window.location.reload(1);
// you'd better pass boolean value to location.reload(), like window.location.reload(true). Code above works too so don't worry.
// }, 10000);
}
}, 10000);
// if user key in anything, then clearInterval to stop checking value
$(document).on('input.input', 'input', function(){
clearInterval(timeout);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input />
答案 2 :(得分:1)
设置超时后,可以将其分配给变量,然后可以使用['1 day', '3 months']
取消该变量,如下所示:
set.seed(1680) # for reproducibility
df <- data.frame(particle=rnorm(300,rep(1:3,100),1), cluster = rep(1:3,100))
此方法的优点是您可以在输入更改后停止检查,而不是触发超时,而是在整个页面寿命中每10秒检查一次该值。
检查默认值比仅检查其是否为空更为可靠。如果用户在字段中键入然后删除了他们的文本,则他们可能仍在编辑过程中,但是无论如何都会进行刷新。对照默认值进行检查,还可以根据需要设置自己的默认值。
对不起-我只是注意到您使用的是jQuery,可以这样做:
clearTimeout