jQuery事件处理程序有时在IE中不会触发

时间:2013-04-28 06:34:27

标签: javascript jquery internet-explorer twitter-bootstrap

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

在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两行。 (即使事件处理程序失败,对话框也会显示按钮,因此在注册事件处理程序之前的两行和事件处理程序工作之后的行。

2 个答案:

答案 0 :(得分:1)

问题是我在事件处理程序中留下了console.log调用。删除console.log调用修复了该问题。 IE没有给你任何迹象表明它无法处理呼叫太糟糕了。它只是静静地死去。调试很麻烦,因为只要打开开发人员工具,它就会起作用。

答案 1 :(得分:0)

可能在文档上绑定事件以确保它不是由不存在的元素绑定问题引起的。

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