下面的代码在IE7中不起作用,但在经过测试的所有其他浏览器中均能完美运行。
元素'#requestFormContainer'
在下面的.ajax
请求之后存在。
实际上,在所有测试的浏览器中,$('#requestFormContainer').length
等于1,但在IE7中等于0。因此它不存在。 IE的调试工具或Firebug中没有错误。我没主意了。
function ShowEventForm(erid) {
$.ajax ({'url': '<?php echo $GLOBALS['SERVER_NAME_HTTP']; ?>ajax/ajax.showrequestform.php',
'data': {'task':'ShowRequestInfo','erid':erid},
'dataType':'html', 'type': 'POST',
'success': function (data) {
$('#eventListContainer').hide();
$('#clientContentPanel').append(data);
$('#backToEventList').click(function() {
$('#requestFormContainer').remove();
$('#eventListContainer').show();
});
}
});
}
更新-没有以下更改的解决方案:
我变了
$('#clientContentPanel').append(data)
至$(data).appendTo('#clientContentPanel')
和
从违规元素中删除并重新放置了一些js代码:
<div id="requestFormContainer">
最佳答案
您如何将$('#requestFormContainer')添加到dom?
您可以查看jQuery .live,它是此问题的常见答案。
否则,您可以重新检查$('#requestFormContainer')是如何添加到dom中的...
var elem = $('<div>');
elem.html('this is the inner contents of the new element');
elem.attr('id', 'requestFormContainer');
body.append(elem);
还将以可用方式在IE中添加元素...
与逻辑方式相反:
$('body').append('<div id="requestFormContainer"><p>some html</p></div>');
IE可能会遇到问题。
我会先研究live()。
http://api.jquery.com/live/
我也不认为这需要您的ajax响应(我将其更新为实时版本)...
$('#backToEventList').live('click', function() {
$('#requestFormContainer').remove();
$('#eventListContainer').show();
});
由于它是不存在的对象上的侦听器,因此它不在ajax请求之外是无害的,并且当在响应中添加.live时,.live仍会将其视为对象。