3

我有一个问题不能自行解决。我正在调试这几天,但没有找到成功,发现问题在哪里。jQuery选择:未捕获NotFoundError:无法执行'节点'上的'appendChild':

我有一个chosen.js + jscrollpane.js。当一个选择被打开时,搜索输入字段必须被集中以写入一些搜索字符串。我第一次打开所选内容会抛出一个错误,我无法在其中搜索任何内容。但如果我关闭选择并重新打开它,一切正常。

我做一个捣鼓你: http://jsfiddle.net/y2h3ohr3/2/

所以错误,当我打开第一次选择,我可以在Chrome中看到的控制台这个错误(在Firefox中,存在错误,但控制台不抛出错误):

Uncaught NotFoundError: Failed to execute 'appendChild' on 'Node': The node to be removed is no longer a child of this node. Perhaps it was moved in a 'blur' event handler?

跟踪该控制台抛出:

jQuery.extend.buildFragment @ jquery-1.9.1.js:6541

jQuery.fn.extend.domManip @ jquery-1.9.1.js:6129

jQuery.fn.extend.append @ jquery-1.9.1.js:5949

initialise @ jquery.jscrollpane.min.js:115

JScrollPane @ jquery.jscrollpane.min.js:1388

(anonymous function) @ jquery.jscrollpane.min.js:1407

jQuery.extend.each @ jquery-1.9.1.js:648

jQuery.fn.jQuery.each @ jquery-1.9.1.js:270

$.fn.jScrollPane @ jquery.jscrollpane.min.js:1399

(anonymous function) @ chosen.jquery.js:774

jQuery.event.dispatch @ jquery-1.9.1.js:3074

elemData.handle @ jquery-1.9.1.js:2750

jQuery.event.special.focus.trigger @ jquery-1.9.1.js:3256

jQuery.event.trigger @ jquery-1.9.1.js:2952

(anonymous function) @ jquery-1.9.1.js:3677

jQuery.extend.each @ jquery-1.9.1.js:648

jQuery.fn.jQuery.each @ jquery-1.9.1.js:270

jQuery.fn.extend.trigger @ jquery-1.9.1.js:3676

jQuery.fn.(anonymous function) @ jquery-1.9.1.js:7403

$.fn.extend.focus @ jquery-ui.js:230

Chosen.results_show @ chosen.jquery.js:968

Chosen.container_mousedown @ chosen.jquery.js:839

(anonymous function) @ chosen.jquery.js:654

jQuery.event.dispatch @ jquery-1.9.1.js:3074

elemData.handle @ jquery-1.9.1.js:2750

我做一个小提琴,这是不一样的,我p中的设计roject,但错误再现完美(请注意第一次打开时选择的chrome控制台)。

你可以在这里查看小提琴:

http://jsfiddle.net/y2h3ohr3/2/

谁能帮助我?我被困住了,因为我没有在任何地方发现错误,所以我无法做出更多。错误是由jquery抛出,而不是选择,所以我没有定制appendChild

+0

我可以将更多的信息,只是告诉我,和我分享你需要考虑这个问题。谢谢 –

+1

对于我来说Firefox并不管用。你能说你使用jscrollpane.js吗?这是不够的choose.js?如果你从[https://harvesthq.github.io/chosen/](https://harvesthq.github.io/chosen/)上的演示中解释你的方法不同,我将尽量在晚上实现它。 – vitalii

+0

这是客户端的一个奇怪的规格。必须使用jscrollpane。是的,这是粗俗的,狗屎的,你所想的所有形容词都在思考着我。但我无法删除它。如果你看到小提琴,在选择的代码被修改为使用jscrollpane,所以它不是原来的选择相同。这是更好的调试一步一步,但我做到了,我不知道问题在哪里。如果您需要特定信息,请告诉我。谢谢!! –

回答

1

这个问题似乎是在下面的行: pane = $('<div class="jspPane" />').css('padding', originalPadding).append(elem.children());

代替append应该appendTodiv.jsPane被添加到现有的元件。 pane = $('<div class="jspPane" />').css('padding', originalPadding).appendTo(elem.children());

jsFiddle here

+0

控制台中是否有任何错误? – Taleeb

+0

不是现在,错误消失了,没关系。但行为仍然很奇怪 –

1

这是因为在你的提琴行115:

pane = $('<div class="jspPane" />').css('padding', originalPadding).append(elem.children()); 

您尝试追加elem.children()到您的窗格,但是当你选择在你选择的东西你的元素变成了孩子。所以jQuery试图删除并添加一个不再存在的子元素。 一个快速解决方案是克隆elem.children,将它们存储在var中并追加克隆的子项。就像这样:

var $children = elem.children().clone(); 
        pane = $('<div class="jspPane" />').css('padding', originalPadding).append($children); 

Updated fiddle

+0

不幸的是,这只是第一次,我打开选择。下一次它不起作用......这很奇怪,因为在小提琴工作正常。在@Taleeb解决方案中也是如此。 –

相关问题