2013-03-20 93 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