我的rails应用程序中的Javascript(jquery)正在使IE崩溃
我有一个RubyonRails应用程序,我使用一个表来显示一些数据,然后允许用户通过单击行并弹出相关数据的表单来编辑表中的数据。对表单进行更改时,表中相应的行将更新 表行单击的事件侦听器显示相应的表单,如下所示:我的rails应用程序中的Javascript(jquery)正在使IE崩溃,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我有一个RubyonRails应用程序,我使用一个表来显示一些数据,然后允许用户通过单击行并弹出相关数据的表单来编辑表中的数据。对表单进行更改时,表中相应的行将更新 表行单击的事件侦听器显示相应的表单,如下所示: $('.addable-rows > tbody').on('click', 'tr', function(e){ e.preventDefault(); var fieldset = $($(this).data('id')); if ($(this).hasCla
$('.addable-rows > tbody').on('click', 'tr', function(e){
e.preventDefault();
var fieldset = $($(this).data('id'));
if ($(this).hasClass('selected')){
$(this).removeClass('selected');
fieldset.hide('slow');
} else {
$(this).siblings().removeClass('selected');
$(this).addClass('selected');
fieldset.siblings().hide('slow');
fieldset.show('slow');
}
});
$('.addable_row_host').on('change', ':input', function(){
var fieldset = $(this).closest('fieldset')
var id = fieldset.attr('id')
$('#'+id+'_tr').replaceWith(build_row(fieldset, id));
});
检查表单上输入的更改并更新表中相应行的侦听器如下所示:
$('.addable-rows > tbody').on('click', 'tr', function(e){
e.preventDefault();
var fieldset = $($(this).data('id'));
if ($(this).hasClass('selected')){
$(this).removeClass('selected');
fieldset.hide('slow');
} else {
$(this).siblings().removeClass('selected');
$(this).addClass('selected');
fieldset.siblings().hide('slow');
fieldset.show('slow');
}
});
$('.addable_row_host').on('change', ':input', function(){
var fieldset = $(this).closest('fieldset')
var id = fieldset.attr('id')
$('#'+id+'_tr').replaceWith(build_row(fieldset, id));
});
上面引用的生成行方法是:
function build_row(fields, id){
row = $("<tr id='"+id+"_tr' data-id='#"+id+"' class='selected'></tr>");
fields.find('select, input:not([type=hidden])').each(function(){
val = $(this).val();
if(val == null){
val = '';
}else if(val.indexOf(",") !== -1){
val.split(",").join(", ");
}
row.append('<td>'+val+' </td>');
});
return row;
}
function build\u行(字段,id){
行=$(“”);
fields.find('select,input:not([type=hidden]))。每个(函数(){
val=$(this.val();
if(val==null){
val='';
}else if(val.indexOf(“,”)!=-1){
val.split(“,”).join(“,”);
}
行。追加(“”+val+“”);
});
返回行;
}
这一切都很有效,在Chrome/FF/Safari中非常可爱,但它会使IE的抓拍效果非常糟糕。IE弹出一个报告崩溃的窗口并重新加载页面。没有提到是什么导致控制台出现问题。此外,此代码中的任何和所有调试语句都会在崩溃之前运行并显示在控制台上,因此我无法确定它发生在何处
有人知道我遗漏了什么吗?尝试重新启动吗?IE不应该只是像那样崩溃。在我试过的三台机器上,这种情况似乎持续发生,在重新启动时持续发生。IE10在Windows 7上的所有实例中,jquery 1.9.1和1.10都使用。您可以进行二进制搜索以查找原因。开始注释掉一半代码,直到崩溃没有发生,然后逐渐取消注释,直到找到导致崩溃的行。然后可以检查运行时状态。可能不相关,但在build_row()中似乎全局设置了“row”和“val”。