2011-11-28 44 views
0

我使用CakePHP和創建表格如何使禁用按鈕時複選框未選中,反之亦然

<?php echo $form->create('User', array('action' => 'cancel'));?> 
    <fieldset> 
     <?php 
      echo $form->input('terms', array('type' => 'checkbox', 'label' => __('Terms and Conditions', true))); 
      echo $form->hidden('security', array('value' => $security)); 
      echo $form->end(__('Cancel My Account', true)); 
     ?> 
    </fieldset> 

現在我想要做的是,最初保持"Cancel My Account"按鈕禁用,並且只有當複選框被選中時,該按鈕應該被啓用,因此執行其各自的操作,反之亦然。我正在使用以下腳本來檢查複選框是否被選中

<script> 
    $('document').ready(function(){ 
     $('#UserTerms').click(function() { 
      var satisfied = $('#UserTerms:checked').val(); 
      if (satisfied != undefined) { 
       $('.cancel-page div.submit input').removeAttr('disabled'); 
      } else { 
       $('.cancel-page div.submit input').attr('disabled', 'disabled'); 
      } 
     }); 
    }); 
</script> 

但是這種方式無法正常工作。未選中該複選框時,該按鈕不會被禁用。請建議如何使其工作。

+0

在你的jQuery中,你正在尋找一個ID爲「UserTerms」的元素。我沒有看到這是由php創建的... –

+0

ID爲「UserTerms」會自動爲cakephp中的複選框創建。 – user850234

+0

什麼不起作用?它會進入點擊事件嗎?它是否進入所需的分支? – api55

回答

4

一個建議,讓我知道,如果它的工作原理:

<script type="text/javascript"> 

    // The function is defined outside the 'document ready' event 
    function handleUserTermsChange() { 

     // Save jQuery object in variable 
     var $userTerms = $('#UserTerms'); 

     // Bind 'change' event to the checkbox 
     $userTerms.bind('change', function() { 

      // Save jQuery object in variable 
      var $cancelAccountButton = $('.cancel-page div.submit input'); 

      // If the checkbox is checked.. 
      if ($userTerms.is(':checked')) { 
       $cancelAccountButton.removeAttr('disabled'); 
      } else { 
       $cancelAccountButton.attr('disabled', 'disabled'); 
      } 

     }).trigger('change'); 
    } 

    $(document).ready(function(){ 

     // The function is called in the 'document ready' event 
     handleUserTermsChange(); 

    }); 

</script> 
  • 它的$(document),而不是$( '文件') - 無 ''
  • 沒有必要在定義函數'準備好文檔', 您可以先定義該函數,然後在準備好的文檔上調用它。
  • 對於複選框,最好使用「更改」事件而不是「點擊」事件。
  • 是更好的利用他們之前保存在變量jQuery的對象,這樣你隨時可以重新使用,而不必一次又一次
  • 是更好的創建它們,以檢查是否複選框是「檢查」,而不是檢查如果它不是'未定義'。
  • .trigger其用來運行一次函數(「變」),這樣,我們檢查的複選框的初始狀態(如果它檢查是否在頁面加載時第一次)

希望它有幫助!

+0

感謝您的更正。這是工作。 – user850234

相關問題