下面的代码在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仍会将其视为对象。

10-04 16:28