我有一个自己无法解决的问题。我正在调试这几天,但没有成功找到问题所在。
我有一个selected.js + jscrollpane.js。当选择打开时,必须将搜索输入字段集中在一起以写入一些搜索字符串。我第一次打开选中时会抛出错误,我无法搜索其中的任何内容。但如果我关闭所选择并重新打开它,一切正常。
我为你做了一个小提琴: http://jsfiddle.net/y2h3ohr3/2/
因此,当我第一次打开所选择的错误时,我可以在Chrome控制台中看到此错误(在Firefox中,错误存在,但控制台没有抛出错误):
未捕获NotFoundError:无法执行' appendChild' on'节点':要删除的节点不再是此节点的子节点。也许它被移动了一个模糊的'事件处理程序?
控制台抛出的跟踪:
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
初始化@ jquery.jscrollpane.min.js:115
JScrollPane @ jquery.jscrollpane.min.js:1388
(匿名函数)@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
(匿名函数)@ 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
(匿名函数)@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。(匿名函数)@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
(匿名函数)@ chosen.jquery.js:654
jQuery.event.dispatch @jquery-1.9.1.js:3074
elemData.handle @jquery-1.9.1.js:2750
我做了一个小提琴,它的设计与我的项目不一样,但错误再现完美(首次打开时请注意Chrome控制台)。
你可以在这里查看小提琴:
http://jsfiddle.net/y2h3ohr3/2/
任何人都可以帮助我吗?我被困了,我无法赚更多,因为我没有在任何地方找到错误。错误是由jquery抛出,而不是选择,所以我没有自定义appendChild
。
答案 0 :(得分:1)
问题似乎在以下几行:
pane = $('<div class="jspPane" />').css('padding', originalPadding).append(elem.children());
而append
应该是appendTo
,而div.jsPane
被添加到现有元素中,而不是pane = $('<div class="jspPane" />').css('padding', originalPadding).appendTo(elem.children());
。
public class AdvertActivity extends Activity implements OnClickListener {
ImageView ivEAdvertUserImage,ivEAdvertImage;
TextView tvEAdvertDislike,tvEAdvertLike,tvEAdvertHeading;
EditText etEAdvertComments;
Button btnEAdvertSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_advert);
InitUI();
tvEAdvertLike.setOnClickListener(this);
tvEAdvertDislike.setOnClickListener(this);
btnEAdvertSubmit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.tvEAdvertLike:
tvEAdvertLike.setTextColor(color.Blue);
break;
case R.id.tvEAdvertDislike:
tvEAdvertDislike.setTextColor(color.Blue);
etEAdvertComments.setEnabled(true);
btnEAdvertSubmit.setEnabled(true);
break;
case R.id.btnEAdvertSubmit:
Intent in =new Intent(AdvertActivity.this,EAdFragment.class);
startActivity(in);
finish();
break;
default:
break;
}
}
public void InitUI(){
ivEAdvertUserImage=(ImageView)findViewById(R.id.ivEAdvertUserImage);
ivEAdvertImage=(ImageView)findViewById(R.id.ivEAdvertImage);
etEAdvertComments=(EditText)findViewById(R.id.etEAdvertComments);
tvEAdvertDislike=(TextView)findViewById(R.id.tvEAdvertDislike);
tvEAdvertLike=(TextView)findViewById(R.id.tvEAdvertLike);
tvEAdvertHeading=(TextView)findViewById(R.id.tvEAdvertHeading);
btnEAdvertSubmit=(Button)findViewById(R.id.btnEAdvertSubmit);
}
}
答案 1 :(得分: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);