2010-10-04 5 views
1

J'ai le code suivant qui active un bouton lorsque la case est cochée.jQuery bouton désactivé avec case à cocher problème

http://jsfiddle.net/ERfWz/1/

Ce qui suit est un extrait du code que j'ai dans ma page HTML. C'est à peu près la même chose, mais pour une raison quelconque, cela ne fonctionne pas. Je pense que je l'ai regardé trop longtemps.

<script type='text/javascript'> 
$(function() { 
    $('#agree').click(function() { 
    var satisfied = $('#agree:checked').val(); 
    if (satisfied != undefined) $('#submit').removeAttr('disabled'); 
    else $('#submit').attr('disabled', 'disabled'); 
    }); 
});​ 
</script> 



<form> 
    <table> 
    <td colspan="5"><input type="checkbox" id="agree" name="agree" />I have read and agree to the terms and 

    conditions</td> 
        </tr> 
        <tr> 
        <td colspan="5" align="center"><input name="Submit" type="submit" id="submit" disabled value="I Accept. 

    Submit"/> 
        <label> 
         <input name="reset" type="reset" id="reset" value="Reset" /> 
         <input type="hidden" name="ip" value=" echo $REMOTE_ADDR; " /> 
        </label></td> 
        </tr> 
        <tr> 
        <td>*Required Fields</td> 
        <td colspan="4"></td> 
        </tr> 
        <tr> 
        <td colspan="5"><h3></h3> 
        <p>&nbsp;</p></td> 
        </tr> 
       </table> 
      </fieldset> 
      </form> 
+0

Les {} sont-ils après if() optionnel? J'ai toujours fait if() {}. – orolo

+0

@orolo: Oui, ils sont facultatifs. C'est une bonne pratique de les utiliser de toute façon, mais s'ils ne sont pas là, la norme est de supposer que la ligne suivante (et seulement la ligne suivante) est la seule chose dans le bloc. –

Répondre

6

Vous pouvez également définir disabled avec true et false, donc vous pouvez simplifier jusqu'à:

$(function() { 
    $('#agree').change(function() { 
    $('#submit').attr('disabled', !this.checked); 
    }); 
});​ 

Test it out here, notez qu'il y avait aussi une balise invalide en cours entraînant certaines incohérences entre les navigateurs , il devrait ressembler à ceci:

<form> 
    <table> 
    <tr><td align="center"><input type="checkbox" name="agree" id="agree">I agree Terms and Conditions</td></tr> 
    <tr><td align="center"><input type="submit" name="submit" id="submit" value="submit" disabled></td></tr> 
    </table> 
</form> 

De plus, le .change() m ethod est un peu mieux ici, pour s'assurer que vous avez l'état correct.

+0

+1 Je ne le savais pas! Est-ce que cela fonctionne également pour d'autres attributs 'x =" x "' comme 'readonly' etc.? – BoltClock

+0

@ BoltClock - Yup, 'selected' aussi bien, chacun de ces sont des booléens dans le DOM :) –

+0

@Nick, c'est parfait. Je vous remercie. Je vais vérifier cela comme la bonne réponse une fois que la limite de temps est écoulée. – 109221793