点击3秒钟后再次自动点击。为什么不工作?
int &n = s1.get();
答案 0 :(得分:1)
我发现您的代码有两个问题:
首先,您将setTimeout用于回调。 setTimeout返回其生成的计时器的int ID。 因此,基本上您现在拥有的是:
.on('click', selector, 123);
显然不起作用。
如果您希望以后执行代码,请将setTimeout 放入回调中。
.on('click', selector, function() {
setTimeout(myFunc, 3000);
});
然后您的回调在单击时运行,并生成计时器。
第二,我假设您希望回调中的this
引用被单击的对象,而不是window
..因此,您必须将thisArg传递给setTimeout或在setTimeout中定义它父范围..或使用不绑定新thisArg的箭头函数。为简单起见,我建议使用箭头功能。
setTimeout( () => {
$(this).trigger('click');
}, 3000);
答案 1 :(得分:0)
您需要检测哪个点击事件是手动事件,哪个是自动事件。因此,定义timer
变量即可完成这项工作。如果timer
等于false
,则表示点击是手动操作,如果true
是指自动点击。
请注意,当调用setTimeout
回调时,this
是指窗口,因此您需要存储this
是变量(ele
)
var timer = false;
$(document).on("click", "input[name='submit']", function(e){
var ele = this;
// First click
if (!timer){
e.preventDefault();
$(ele).prop("disabled", true)
setTimeout(function(){
timer = true;
$(ele).prop("disabled", false).trigger('click');
}, 3000)
// Second click
} else {
console.log("Submit form");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="submit" name="submit" value="click">