2013-03-20 54 views
1

我有一个web窗体,我将beforeunload事件绑定到窗口,以检测对的任何更改,除了我输入的内容不需要包含。例如,我不需要绑定beforeunload事件的输入。它应该只绑定输入,这些输入会在离开窗口导航时影响失去更改。链.on()与.not()从对象中删除不需要的元素

这是当前绑定我有:

formChanged = false; 
$('#main-form').on('change.form_change', 'input:not(.leave-change-allowed), textarea:not(.leave-change-allowed), select:not(.leave-change-allowed)', function() 
{ 
    if(!formChanged) 
    { 
     formChanged = true; 

     $(window).bind('beforeunload', function() 
     { 
      if(formChanged) 
      { 
       return 'Are you sure you want to navigate away from this window, you will lose unsaved changes.'; 
      } 
     }); 
    } 
    else 
    { 
     $(this).unbind('change.form_change'); 
    } 
}); 

正如你可以看到我已经包含:not(.leave-change-allowed)到在选择器中的元素,以逗号分隔以选择的形式的元素。虽然,我不想将not()添加到选择器,因为可能会有几个选择器我想添加到not(),但我需要应用到每个输入格式inputtextareaselect。请记住,这些元素是动态的,所以我用.on()而非.change()

我怎样才能链.not()功能与动态元素?所以我一直选择完整,并通过在.not()功能的所有不必要的元素?

回答

3

检查目标函数内部的类:

formChanged = false; 
$('#main-form').on('change.form_change', 'input, textarea, select', function(e) { 
    if(! (formChanged || $(e.target).is('.leave-change-allowed'))) { 
     formChanged = true; 
     $(window).on('beforeunload', function() { 
      if(formChanged) { 
       return 'Are you sure you want to navigate away from this window, you will lose unsaved changes.'; 
      } 
     }); 
    } else { 
     $(this).off('change.form_change'); 
    } 
}); 
+0

这很好地工作,我已经添加在'if'声明缺少支架。干杯。 – MacMac 2013-03-20 22:25:41

+0

不客气? – adeneo 2013-03-20 22:26:38

+0

这是一个cookie? – MacMac 2013-03-20 22:27:24