2015-05-28 4 views
2

Скрипт работает нормально, но мне интересно, есть ли способ избежать повторения кода (метод DRY).Флажок Jquery проверен при загрузке страницы

Demo

JS код:

// Checkbox checked and input disbaled when page loads 

$('#checkbox').prop('checked', true); 

if ($('#checkbox').is(':checked') == true) { 
    $('#textInput').prop('disabled', true); 
} 


// Enable-Disable text input when checkbox is checked or unchecked 

$('#checkbox').change(function() { 
    if ($('#checkbox').is(':checked') == true) { 
     $('#textInput').prop('disabled', true); 
    } else { 
     $('#textInput').val('').prop('disabled', false); 
    } 
}); 
+2

Почему бы не просто установить текстовое поле как отключенное в html? Вам все равно, что он включен после того, как пользователь снял флажок :) – George

ответ

4

Если вы не можете установить атрибуты по умолчанию в HTML:

// Checkbox checked and input disbaled when page loads 
$('#checkbox').prop('checked', true); 

// Enable-Disable text input when checkbox is checked or unchecked 
$('#checkbox').on('change', function() { 
    var value = this.checked ? $('#textInput').val() : ''; 
    $('#textInput').prop('disabled', this.checked).val(value); 
}).trigger('change'); 

Демо: http://jsfiddle.net/tusharj/t01a9cxL/1/

1

Раздельный логик в одну функцию:

function checkboxStatus() { 
    if ($('#checkbox').is(':checked') == true) { 
     $('#textInput').prop('disabled', true); 
    } else { 
     $('#textInput').val('').prop('disabled', false); 
    } 
} 

// Checkbox checked and input disbaled when page loads 
$('#checkbox').prop('checked', true); 
checkboxStatus(); 

// Enable-Disable text input when checkbox is checked or unchecked 
$('#checkbox').change(checkboxStatus); 
1

Простых сделать его как простой JQuery в есть много способов сделать

$('#checkbox').prop('checked', true); // when intially checked 
$('#checkbox').change(function(){ 
    $('#textInput').prop('disabled', $(this).is(':checked')); 
    if(!$(this).is(':checked')){ 
     $('#textInput').val('') 
    } 
}).change(); //intially trigger the event change 

Fiddle

+0

@Tushar I Misunderstood Извините –

2

Если каждый раз, когда страница загружена вы хотите, чтобы флажок, чтобы проверить и текстовое поле, чтобы отключить это лучше сделать это в HTML

HTML

<input type="checkbox" id="checkbox" checked="true" /> 
<input type="text" id="textInput" disabled=""/> 

JavaScript

// Enable-Disable text input when checkbox is checked or unchecked 

$('#checkbox').change(function() { 
    if ($('#checkbox').is(':checked') == true) { 
     $('#textInput').prop('disabled', true); 
    } else { 
     $('#textInput').val('').prop('disabled', false); 
    } 
}); 
1

Вы можете получить тот же результат с меньшим количеством кода следующим образом:

Updated Fiddle

// Checkbox checked and input disbaled when page loads 
$('#checkbox').prop('checked', true); 
$('#textInput').prop('disabled', true); 

// Enable-Disable text input when checkbox is checked or unchecked 
$('#checkbox').change(function() { 
    var checked = $(this).is(':checked') == true; 
    $('#textInput').prop('disabled', checked); 
}); 

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

  • Нет связанных вопросов^_^