我有一个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 :(得分: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
}
});
答案 1 :(得分: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;
}