2015-04-20 2 views
-1

У меня есть следующий скрипт, который отлично работает там, где он активирует кнопку и выбирает опцию на основе некоторых ограничений.проверить, существует ли значение в массиве не работает

<script> 
var update_selectopt=function(){ 
$("tr").each(function(){ 
    if($("input[type='checkbox']", this).is(":checked")){ 
    $('#select',this).removeAttr('disabled'); 
    } 
    else{ 
    $('#select',this).attr('disabled','disabled'); 
    } 
}); 
}; 

function updateSubmitButtonState(){ 

var enableableLineCount= 0; 
$("tr").each(function(){ 

if(isEnableableLine(this)) 
    enableableLineCount++; 
}); 

if(enableableLineCount > 0) 
    $('[type="submit"]').removeAttr("disabled"); 
else 
    $('[type="submit"]').attr("disabled","disabled"); 


function isEnableableLine(tr){ 

if( 
    $("input[type='checkbox']", tr).is(":checked") && 
    $("select option[value='no_action']:selected", tr).length == 0 
) 
    return true; 
else 
    return false; 
    } 
} 

$(update_selectopt); 
$("input[type='checkbox']").on("click",update_selectopt); 

$("input[type='checkbox']").on("click",updateSubmitButtonState); 
$("select").on("change",updateSubmitButtonState); 
</script> 

Но когда я добавить код для проверки значения в массиве и выскакивает окно предупреждения, если нет, то он не работает, а также нарушение кода - создание кнопки неактивна все время, выберите опции все активные все время. Кроме того, я немного смущен, когда поставить код, чтобы кнопка неактивна все время, пока все условия не верны.

Полный сценарий

<script> 

var state_list_swap=["AVAILABLE","IMPAIRED"] 
var state_list_shut=["ERROR"] 
var state_list_scan=["SUSPENDED"] 

var update_selectopt=function(){ 
$("tr").each(function(){ 
    if($("input[type='checkbox']", this).is(":checked")){ 
    $('#select',this).removeAttr('disabled'); 
    } 
    else{ 
    $('#select',this).attr('disabled','disabled'); 
    } 
}); 
}; 

function updateSubmitButtonState(){ 

var enableableLineCount= 0; 
$("tr").each(function(){ 

if(isEnableableLine(this)) 
    enableableLineCount++; 
}); 

if(enableableLineCount > 0) 
    $('[type="submit"]').removeAttr("disabled"); 
else 
    $('[type="submit"]').attr("disabled","disabled"); 


function isEnableableLine(tr){ 

if( 
    $("input[type='checkbox']", tr).is(":checked") && 
    $("select option[value='no_action']:selected", tr).length == 0 
) 
    return true; 
else 
    return false; 
} 
} 

$(update_selectopt); 
$("input[type='checkbox']").on("click",update_selectopt); 

$("input[type='checkbox']").on("click",updateSubmitButtonState); 
$("select").on("change",updateSubmitButtonState); 


$("input[type='submit']").click(function(){ 
$("tr").each(function(){ 
    if (
    $("select option[value='swap']:selected",tr) 
    ){ 
     var cells=$(this).find('td'); 
     $(cells).each(function(){ 
      if (jQuery.inArray($(this).text(),state_list_swap)!=-1){ 
       alert('swap is allowed only with "AVAILABLE","IMPAIRED" states'); 
      } 
      }); 
    } 
    else if(
     $("select option[value='scan']:selected",tr) 
    ){ 
      var cells=$(this).find('td'); 
      $(cells).each(function(){ 
       if (jQuery.inArray($(this).text(),state_list_scan)!=-1){ 
       alert('scan is allowed only with "SUSPENDED'); 
       } 
      }); 

     } 
    else if(
     $("select option[value='shut']:selected",tr) 
    ){ 
      var cells=$(this).find('td'); 
      $(cells).each(function(){ 
       if (jQuery.inArray($(this).text(),state_list_shut)!=-1){ 
       alert('shut is allowed only with "ERROR" states'); 
       } 
      }); 

     } 

    }  

}); 

</script> 
+7

Вы проверили на наличие ошибок в консоли? – Pointy

+1

^что есть недостающие скобки для последнего цикла 'each' – adeneo

+0

Я бы переформатировал ваш вопрос, поставив вашу проблему в начале и используя более мелкие фрагменты кода проблемного кода. Это облегчит для других ответ на ваш вопрос. –

ответ

0

Попробуйте эти исправления:

<script> 

    var state_list_swap=["AVAILABLE","IMPAIRED"] 
    var state_list_shut=["ERROR"] 
    var state_list_scan=["SUSPENDED"] 

    var update_selectopt=function(){ 
     $("tr").each(function(){ 
      if($("input[type='checkbox']", this).is(":checked")){ 
       $('#select',this).removeAttr('disabled'); 
      } 
      else{ 
       $('#select',this).attr('disabled','disabled'); 
      } 
     }); 
    }; 

    function updateSubmitButtonState(){ 

     var enableableLineCount= 0; 
     $("tr").each(function(){ 
      if(isEnableableLine(this)){ 
       enableableLineCount++; 
      } 
     }); 

     if(enableableLineCount > 0){ 
      $('[type="submit"]').removeAttr("disabled"); 
     }else{ 
      $('[type="submit"]').attr("disabled","disabled"); 
     } 

     function isEnableableLine(tr){ 
      if( 
       $("input[type='checkbox']", tr).is(":checked") && 
       $("select option[value='no_action']:selected", tr).length == 0 
      ){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 
    } 
    //WHATS THIS 
    //$(update_selectopt); 

    $("input[type='checkbox']").on("click", update_selectopt); 

    $("input[type='checkbox']").on("click", updateSubmitButtonState); 

    $("select").on("change",updateSubmitButtonState); 


    $("input[type='submit']").click(function(){ 
     // inside this, you had no reference to what 'tr' was 
     // --added it as the element reference in the .each loop 
     $("tr").each(function (ind, tr) { 
      if ($("select option[value='swap']:selected", tr)) { 
       var cells = $(this).find('td'); 
       $(cells).each(function (index, element) { 
        if (jQuery.inArray($(element).text(), state_list_swap) != -1) { 
         alert('swap is allowed only with "AVAILABLE","IMPAIRED" states'); 
        } 
       }); 
      } 
      else if (
       $("select option[value='scan']:selected", tr) 
      ) { 
       var cells = $(this).find('td'); 
       $(cells).each(function (index, element) { 
        if (jQuery.inArray($(element).text(), state_list_scan) != -1) { 
         alert('scan is allowed only with "SUSPENDED'); 
        } 
       }); 

      } 
      else if (
       $("select option[value='shut']:selected", tr) 
      ) { 
       var cells = $(this).find('td'); 
       $(cells).each(function (index, element) { 
        if (jQuery.inArray($(element).text(), state_list_shut) != -1) { 
         alert('shut is allowed only with "ERROR" states'); 
        } 
       }); 

      } 
     }); 
    }); 

</script>