2013-04-28 93 views
0

我遇到了IE问题。在我的应用程序中,我有一个用户可以显示的对话框。该对话框使用来自AJAX调用的数据构建。然后,我为该按钮注册一次事件处理程序。在FF,Chrome和Safari中,我没有任何问题。对话框显示并且按钮起作用。这已经工作了很长时间。jQuery事件处理程序有时在IE中没有触发

在IE中,对话框显示,但有时事件处理程序不会触发。点击按钮不起作用。这并不总是发生。到目前为止,这似乎发生在您打开IE后首次查看该页面。关闭对话框并重新打开有时会修复它。重新加载页面有时会修复它。一旦修复,无论页面重新加载,似乎都不会再次失败。必须退出IE才能使问题重新出现。我无法使用开发人员工具,因为开发人员工具处于打开状态时问题会消失。

$('#btn_school_choices').button('loading'); 

$.ajax({ 
    type: 'GET', 
    url: 'ajax/optimized_colleges.php', 
    dataType: 'json', 
    success: function(data, status, xhr) { 
    // Some code to prepare the data returned 

    // Build the dialog using the data and add to DOM 
    $('#modal_opt_in').html(ich.dialog_optimize_college_selection(optinData)); 

    $('#btn_school_choices').button('reset'); 

    // Add Event Handler to Button in Dialog 
    $('#btn_add_colleges').one('click', function() { ... } 

    // Show the Dialog 
    $('#modal_opt_in').modal({backdrop: 'static', show: true}); 

    error: function(xhr) { ... } 
}); 

我尝试过使用on()和off()并且发生同样的问题。在这一点上,我一直试图解决这个问题大约两个星期。任何帮助,将不胜感激。

该按钮应该在注册事件处理程序时存在,因为它被添加到前两行的DOM中。 (即使事件处理程序失败,对话框也会显示按钮,所以在注册事件处理程序之前的两行和事件处理程序之后的行之间。

+0

请尝试将button.one()绑定到ajax调用之前的某个地方,并请发布整个代码 – Xerxes 2013-04-28 06:57:36

+0

什么版本的IE?你可以发布你的标记吗? – albert 2013-04-28 07:00:14

+0

我的猜测是,你正试图在ajax调用完成之前设置事件处理程序,因此对象不在DOM中。但是,您还没有向我们展示足够的代码以确定知道。 – jfriend00 2013-04-28 08:03:21

回答

0

也许绑定文档上的事件以确保它是没有一个不存在的元素绑定问题引起的。

$(document).one('click', '#btn_add_collegues', function() { 
    // ... 
}); 
+0

这没有效果。仍然展出了同样的问题。 – 2013-04-28 22:07:30

1

的问题是,我已经离开事件处理程序的console.log调用。卸下的console.log调用固定的问题。这太糟糕了,IE并没有给你任何迹象表明它不能处理这个调用,它只是静静地死去,调试是一个痛苦,因为它只要你打开开发工具就可以工作。

相关问题