2013-07-09 14 views
0

與此相關的問題:Using jQuery, keep a form's submit button disabled until all of the required textbox, radio, checkbox elements have a value (or are checked)具有特定屬性Count輸入的電流數的函數運行後已經改變了這些特性

我很慈祥幫助這個功能

$('input[type=submit]').prop('disabled', true).addClass('disabled'); 

    var required = $('[required]'); 

    required.bind('change keyup', function() 
    { 
     var flag = 0; 
     required.each(function() 
     { 
      if ($(this).not(':checkbox, :radio').val() || $(this).filter(':checked').val()) 
      { 
       flag++; 
      } 
     }); 

     if (flag == required.length) 
     { 
      $('input[type=submit]').prop('disabled', false).removeClass('disabled'); 
     } 
     else 
     { 
      $('input[type=submit]').prop('disabled', true).addClass('disabled'); 
     } 
    }); 

放在一起這裏發生的事情是,表單的提交按鈕處於禁用狀態,直到具有「必需」屬性的所有字段都具有某種價值(或已被選中等)。

作爲更大圖片的一部分,另一個jQuery函數(工作正常)根據選擇框的值隱藏了一些這些字段。

實際上,當這些字段被隱藏時,所需的屬性應該被刪除。隨着所需的屬性被刪除,我希望上面的函數只需要計算(required.length)剩餘的必填字段,但實際上,它計算了所有這些字段 - 即使是那些不再具有所需屬性的字段。

圍繞此問題的任何想法?

+0

除了將選定元素存儲在變量('required')中,您可以重新選擇它們。 –

回答

1

您正在反覆比較相同的一組元素。您需要在每次檢查時重新選擇您需要的那些。

變化

required.each(function() 

$([required]).each(function() 

您選擇所有元素,然後通過他們循環,他們現在有屬性無關。你想讓jQuery重新選擇現在具有required屬性的元素,以便獲得更新的列表。這應該按照您的預期執行。

+0

我覺得很蠢,我錯過了這個......噢,至少我不會再犯同樣的錯誤!謝謝,這基本上做我需要做的事情。 – SpongeBobPHPPants

1

你不僅能去除required屬性附加傷害,而且1 .unbind('change keyup')此元素2.收集與required = required.not('[required]');

this fiddle刪除它給了基本思路:單擊按鈕都需要投入提醒自己號碼前,後您點擊它,總長度減少,第二輸入停止提醒

不要忘記綁定change keyup如果你把它再次需要

+0

再次感謝您的幫助,vladkras。 @Schleis在這個場合提出了最好的答案。但我真的很感謝你提供這個解決方案,並且善待你的時間來幫助我(再次)。謝謝。 – SpongeBobPHPPants

+0

@PHPNewbGallery這很奇怪,因爲當你刪除'requried'屬性時 - 它不會讓你從元素中解除''event',[示例](http://jsfiddle.net/vladkras/Xtwnp/2/) – vladkras

1

您可以添加:

|| $(this).css('display') === 'none') 

to if if flags ++。