2013-07-30 2 views
0

В этой программе мне нужно отключить кнопку Html, когда флажок не выбран. Кнопка должна быть включена, только если установлен флажок. Im с использованием JQuery версии 1.8.3. Однако в этой программе замена между включением и отключением не работает, как я ожидал.JQuery removeAttr и attr

// ------ HTML

<body> 
Some agreement here 
<p> 
    <input type="checkbox" id="agree" /> 
</p> 
<input type="button" value="Continue" disabled="disabled" id="continue"/> 

<script type="text/javascript" src="js/jquery-1.8.3.js"></script> 
<script type="text/javascript" src="js/class.js"></script> 
</body> 

// ------ JQuery

$(document).ready(function(){ 
    $('#agree').change(function(){ 
     state = $(this).attr('value'); 
     if(state == 'on'){ 
      $('#continue').removeAttr('disabled'); 
     }else if(state == ''){ 
      $('#continue').attr('disabled','disabled'); 
     } 

    }); 
}); 
+0

Вы говорите, что «не работает, как я ожидал» - что точно проблема? – SmokeyPHP

ответ

1

Попробуйте следующую функцию вместо:

$(document).ready(function(){ 
    $('#agree').change(function(){ 
     var checked = $(this).prop('checked') 
     if(checked){ 
      $('#continue').removeAttr('disabled'); 
     }else{ 
      $('#continue').attr('disabled','disabled'); 
     } 
    }); 
}); 

См this fiddle.

В итоге, вы проверяете для значения из #agree, который не установлен в любой точке. prop() - лучший способ определить, установлен ли флажок. prop() либо вернет true, либо false, что значительно упростит ситуацию.

+0

Спасибо за ваше решение. Является ли это совместимым с версией 1.8 – amal

+1

Это так. Если вы посмотрите [скрипка] (http://jsfiddle.net/5SNrW/), вы увидите на боковой панели слева, что я использовал jQuery версии 1.8.3. – theftprevention

+0

Да. Наконец, это работает. thnx – amal

2

Для disabledchecked), вы должны использовать вместо .prop()

$("#continue").prop("disabled",true); 

Хотя это поможет, если вы сообщите нам, что именно не работает должным образом

0

Отключенный атрибут не нуждается в ="disabled" после него. Вобще:

<input type="button" value="Continue" disabled /> 

И вы должны использовать вместо .prop('disabled', true) в любом случае. И .removeProp().

1
$(document).ready(function(){ 
    $('#agree').change(function(){ 
     if($(this).is(":checked")){ 
      $('#continue').removeAttr('disabled'); 
     }else{ 
      $('#continue').attr('disabled','disabled'); 
     } 

    }); 
}); 
+0

Thanx много для вашего решения. Это также правильное решение для моей проблемы. – amal

0
$(document).ready(function(){ 
     $('#agree').click(function(){ 
      $("#continue").attr("disabled", !this.checked); 

     }); 
    }); 

Я надеюсь, что это должно помочь. см в Fiddle

0

Простой способ будет использовать this.checked или использовать $(this).is(":checked") вместе с prop манипулировать input:button:

$('#agree').change(function() { 
    $("#continue").prop("disabled", !$(this).is(":checked")); 
    //$("#continue").prop("disabled", !this.checked); 
}); 

Демо: http://jsfiddle.net/hungerpain/p9u7Y/

Смежные вопросы