2017-06-21 36 views
0

我有一个事件:改变事件的proccess之前jQuery的检查复选框做

$(document).on('change', '.many-checkbox', function() { 
    doSomething() 
}); 

doSomething()是有点重,所以与many-checkbox类复选框将有一个延迟他们实际上正在检查/取消选中之前。

我想删除这些延迟。

那么,我们如何在doSomething()完成之前检查/取消选中它?

谢谢。

+0

你可以在StackSnippet/JSFiddle中重现这个吗?看起来问题可能在其他地方。或在'doSomething'中。 – Tushar

+1

顺便说一句,'$(this).prop('checked',$(this).prop('checked'));'没有什么,但增加了延迟。 – Tushar

+0

我确定问题出在'doSomething',这就是为什么我想绕过它。因此,即使在doSomething完成之前,也可以使复选框被手动选中/取消选中。 –

回答

0

您可以使用setTimout函数替换函数doSomething()函数。例如:

$(document).on('change', '.many-checkbox', function() { 
    setTimeout(function(){ 
    // do something 
    }, 100); 
}); 

结果JavaScript执行将暂停以使渲染线程赶上。

+0

为什么?它将如何使函数更快地执行? – Tushar

+0

@Tushar,这不会更快。但它会在另一个行动后执行。我很抱歉,但我不记得这个解决方案的来源。 – Alexander

+0

@Tushar,我找到[主题](https://stackoverflow.com/a/779785/7914637),回答你的问题。 – Alexander

0

我怀疑这里有各种各样的错误,但是你可以先听听整个机构内的任何变化,然后过滤到.many-checkbox类。

直接聆听更改复选框:

$('.many-checkbox').on('change', function() { 
    doSomething(); 
}); 

如果你告诉我们什么DoSomething的是做,我们也许可以让它异步的。

+0

对不起,它的方式很难做到异步。正如你所说,它有很多错误,我的错误代码〜但非常感谢你的答复,非常感谢。 –