Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
addClass的jquery回调执行两次_Jquery - Fatal编程技术网

addClass的jquery回调执行两次

addClass的jquery回调执行两次,jquery,Jquery,我在addClass的回调函数中给了元素一个append函数。但该函数执行两次。为什么? //附加新的阶段函数-----// var-newNode; 函数appendNewStage{ var parent=$'。ci-TOWERY-interactions-CAVANS____行'; var newStage=` `; var position=$parent.findul:last.position; var width=$parent.findul:last.outerWidth; ne

我在addClass的回调函数中给了元素一个append函数。但该函数执行两次。为什么?

//附加新的阶段函数-----// var-newNode; 函数appendNewStage{ var parent=$'。ci-TOWERY-interactions-CAVANS____行'; var newStage=` `; var position=$parent.findul:last.position; var width=$parent.findul:last.outerWidth; newNode=$newStage.appendToparent; 如果剩余长度>0{ newNode.htmlremain; } $newNode.find'li:first-child'。addClass'first-child'; newNode.css{ 位置:绝对, 左:宽度+位置。左-89, 顶部:位置。顶部+140 }; var dropArea=$newNode.find'.ci droppable'; dropArea.droppable; dropArea.droppable{ 接受:.ci可拖动, }; 元素选择新节点; }; //分期功能// 功能阶段事件{ $.stage:最后一个子级.addClass'staged',functionevent{ 附加新闻阶段; }; $.stage.findli:不是“.ui已选定”。删除; $.stage.findli.blank.remove; $.stage.removeClassstage; }
I在按钮单击事件上触发分段功能。当我在阶段性回调上发出警报时,它通常会运行两次,jQuery的动画回调会在每个元素上发生。因此,如果$.stage:last child匹配两个元素,因为有两个.stage元素是其父元素中的最后一个子元素,那么您将得到两个回调—每个元素一个回调。从[动画文档]

回调函数

如果提供了,则在每个元素的基础上调用start、step、progress、complete、done、fail和always回调。。。如果对多个元素设置了动画,则每个匹配的元素执行一次回调,而不是对整个动画执行一次回调。使用.promise方法获取一个promise,您可以附加对任何大小的动画集(包括零元素)触发一次的回调

因此,假设您所使用的内容与jQuery的动画内部结构配合得很好,jQuery UI one会:

$(".stage:last-child").addClass('staged').promise().then(appendNewStage);
使用jQuery UI的addClass的示例:

$.stage:last-child.addClassstaged,函数{ +this.id的console.logCallback; } .promise.then功能{ 控制台。全部完成; }; .上演{ 颜色:蓝色; } 测试1 2 3 测试9 8 7
您的逻辑有缺陷,因为addClass没有回调。它不是异步的。@Rorymcrossan:一些库,例如,为addClass添加动画。@TJCrowder你说得对。我总是忘了jQuery的私生子。那么,解决办法是什么呢?@sonusasankan:当所有的事情都完成后,你想要一次回调吗?如果是这样的话,我已经在上面添加了您是如何做到这一点的。