2014-10-27 66 views
0

我有一個select type下拉列表,在選擇時會將用戶重定向到另一個頁面。我希望他們在使用此select下拉列表時嘗試在未保存的情況下導航時發出警告。確定取決於輸入類型的值

但是,當確定輸入類型已更改時,需要忽略此特定select type作爲input types之一。這是我的劇本,但它不執行所需的操作,(其中.send1引用實際select type):

$(document).on('change', '.send1', function(){ 
    if($(":input").not('.send1')){ 
     $(":input").change(function(){ 
     unsaved = true; 
     }); 
    } 
    }); 

如果unsaved == true,那麼一個用戶有一個警告,也有未保存的更改。

+0

嘗試添加提示()函數,以提示用戶 – 2014-10-27 17:56:59

+0

的jsfiddle PLZ ... – morissette 2014-10-27 17:58:37

+0

請不要使用提示。如果有的話,寫一個自定義模式。 – 2014-10-27 18:02:39

回答

1

.not()方法返回一個jQuery對象,一個對象被認爲是在JavaScript中truthy值,你應該使用length屬性檢查集合的長度。但是,這不是主要問題,整個邏輯聽起來並不樂觀。如果你想排除從選擇的元素,你可以在你選擇使用:not

var unsaved = false; 

$(document).on('change', '.send1:not("select.specific")', function() { 
     unsaved = true; 
}); 

$('select.specific').on('change', function() { 
    if (unsaved) { 
     // show a modal/alert something... 
    } else { 
    // redirect 
    } 
}); 
+0

感謝使用':not()'似乎有是使用過的正確選擇器。 – user94628 2014-10-27 18:22:34

0

我真的不明白你在問什麼。看來你試圖確定一個輸入控件是否具有類'send1' - 如果是的話,你忽略它?爲什麼你將所有的輸入綁定到事件處理程序?你可以發佈你的HTML標記嗎?

最接近我可以幫忙的是建議您在所有輸入中放入一個類,這些輸入中可能存在未保存的數據。然後,寫出來供大家選擇列表中的事件處理程序重定向到另一個頁面:

$("#ddlThatRedirects").change(function(e){ 
    if (CheckFields()){ 
      //Put whatever alerting you want here 
    } 
    else{ 
      //Put redirect or postback logic here 
    } 
}); 

function CheckFields(){ 
    var UnsavedChanges = false; 
    $(".ClassNameOfInputs").each(function(){ 
      if ($(this).val().length > 0) 
       UnsavedChanges = true; 
    }); 
    return UnsavedChanges; 
}