我只在使用此js代码的旧IE浏览器上遇到问题:
var elements = [
{'name':'manuscript_file', 'filetype':/(\.|\/)(doc|docx|txt|odt|zip|rar|rtf|gz|tar|bz2|bz|7z|tex)$/i},
{'name':'presentation_file', 'filetype':/(\.|\/)(pdf)$/i},
{'name':'figures_file', 'filetype':/(\.|\/)(pdf|png|jpg|gif|zip|rtf|eps)$/i},
{'name':'graphical_file', 'filetype':/(\.|\/)(pdf|png|jpg|gif)$/i},
{'name':'supplementary_file', 'filetype':/(\.|\/)(zip)$/i},
{'name':'non_published_material', 'filetype':/(\.|\/)(doc|docx|zip|pdf)$/i},
]
, url = $('form').attr('action');
$.each(elements, function(i, element) {
$('#form_' + element.name).val('');
$('#form_' + element.name).prev('button').removeAttr('disabled')
...
与
一致 $('#form_' + element.name).val('');
IE7告诉我
Message: 'name' is null or not an object
有什么想法吗? THX。
答案 0 :(得分:4)
这里的问题在于元素数组中的尾随逗号。 Internet Explorer 7错误地解释了最后一个逗号右侧的值。这使得长度为n + 1,从而导致jQuery在其最后一个循环中评估空值:
var elements = [
{ 'name': 'manuscript_file' },
{ 'name': 'non_published_material' }, <--
]
您可以通过循环两个数组来确认这一点;一个带尾随逗号,一个带逗号。在IE 7中打开http://jsfiddle.net/jonathansampson/mqntjbky/show/进行确认。
(function () {
var elements = [
{ name: "Foo" },
{ name: "Bar" }
];
var alternatives = [
{ name: "Fizz" },
{ name: "Buzz" },
];
// This $.each will not throw an exception
$.each( elements, function create ( i, element ) {
try {
$( "<div></div>" ).text( element.name ).appendTo( "body" );
} catch ( e ) { alert( "Top fail: " + e.message ) }
});
// This $.each WILL throw an exception
$.each( alternatives, function create ( i, element ) {
try {
$( "<div></div>" ).text( element.name ).appendTo( "body" );
} catch ( e ) { alert( "Bottom fail: " + e.message ) }
});
}());
下面注意&#34; Top失败&#34;永远不会引发消息,因为它在循环集合中的块中缺少一个尾随逗号。 &#34;底部失败&#34;但是,消息位于受影响的块中,因此在迭代期间会生成。