Javascript 克隆和更改onchange参数在IE中不起作用
我的表单上有一个表,它有一行或多行,每行都包含一些字段,这些字段有onchange处理程序,这些处理程序包含包含tr的id,如中所示 我想克隆其中一行,并更新id和对onchange处理程序的调用。idGlob是具有行数计数的全局变量Javascript 克隆和更改onchange参数在IE中不起作用,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我的表单上有一个表,它有一行或多行,每行都包含一些字段,这些字段有onchange处理程序,这些处理程序包含包含tr的id,如中所示 我想克隆其中一行,并更新id和对onchange处理程序的调用。idGlob是具有行数计数的全局变量 function cloneLine(previd) { var id = '<% $prefix %>_row_' + idGlob; idGlob++; var $prevLine = jQuery('#' + previd);
function cloneLine(previd) {
var id = '<% $prefix %>_row_' + idGlob;
idGlob++;
var $prevLine = jQuery('#' + previd);
var prevId = $prevLine.attr('id');
var regExp = new RegExp(prevId, 'g');
var replaceIdFunction = function(row, attr) {
if (attr) {
return attr.replace(regExp, id);
}
};
var $newLine = $prevLine.clone();
$newLine.attr('id', id).find('*').each(function(index, element) {
jQuery(element).attr(
{
'id': replaceIdFunction,
'onchange' : replaceIdFunction,
'for' : replaceIdFunction,
'onclick' : replaceIdFunction
})
});
// XXX This is a work-around for a bug in Firefox. Clone is supposed to
// copy the value, but it doesnt for select and textarea!
// https://bugzilla.mozilla.org/show_bug.cgi?id=230307
$prevLine.
find('select,textarea').each(function(index, element) {
var $element = jQuery(element);
var name = $element.attr('name');
$newLine.find('[name="' + name + '"]').val(
$element.val());
});
$prevLine.after($newLine);
}
这在所有常见的Chrome、Firefox、Safari中都能很好地工作,但在IE上由于一些奇怪的原因,即使你用Firebug Lite检查元素,它显示克隆具有onchange=changeAccessSystem'System\u row\u 1','environment',当你更改它时,调用changeAccessSystem函数时,第一个参数为“System\u row\u 0”。我调用.clone是否为真似乎无关紧要。我之前在IE上遇到过这样的问题。我找到了两个解决方案。首先,从您选择的内联onchange事件中删除该函数。相反,使用jQuery/JavaScript添加事件。例如:
$("select").change(function(e) { // do work ....
其次,在旧版IE中,change/onchange事件不能正常启动。因此,您必须巧妙地处理propertychange事件。像这样:
$('select').bind($.browser.msie ? 'propertychange': 'change', function(e) { // do work
当然,您可以在事件函数中调用您的函数,并根据调用绑定事件的元素根据需要设置参数。如果您想要特定的计数或获取特定行数的父tr索引,或者等等,您也可以使用.each
希望这有帮助,如果需要更多的例子,请点击评论中的这篇文章。我之前在IE上遇到过这样的问题。我找到了两个解决方案。首先,从您选择的内联onchange事件中删除该函数。相反,使用jQuery/JavaScript添加事件。例如:
$("select").change(function(e) { // do work ....
其次,在旧版IE中,change/onchange事件不能正常启动。因此,您必须巧妙地处理propertychange事件。像这样:
$('select').bind($.browser.msie ? 'propertychange': 'change', function(e) { // do work
当然,您可以在事件函数中调用您的函数,并根据调用绑定事件的元素根据需要设置参数。如果您想要特定的计数或获取特定行数的父tr索引,或者等等,您也可以使用.each
希望这有帮助,如果需要更多示例,请点击评论中的这篇文章。我花了一段时间更改了所有代码以使用它,但我改变了所有要使用的内容。on而不是您建议的。更改是因为它是动态的,但这肯定解决了问题。是的,我不确定您是否需要。on,但除了将事件添加到动态添加的元素之外,它也执行相同的操作。很高兴我能帮忙!我花了一段时间来更改所有代码以使用它,但我改变了所有要使用的内容。on而不是您建议的。更改是因为它都是动态的,但这肯定解决了问题。是的,我不确定您是否需要。on或否,但除了将事件添加到动态添加的元素之外,做了相同的事情。很高兴我能帮忙!