根据输入类型确定值

时间:2014-10-27 17:49:12

标签: javascript jquery html

我有一个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,则用户会收到有未保存更改的警告。

2 个答案:

答案 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;
}