Установлено прапорець jquery


479

Я вже спробував усі можливі способи, але все одно не працював. У мене є модальне вікно з checkboxя хочу, щоб, коли модал відкриється, checkboxперевірка чи зніміть прапорець має базуватися на значенні бази даних. (У мене це вже працює з іншими полями форм.) Я почав намагатися перевірити це, але це не вийшло.

Мій html div:

<div id="fModal" class="modal" >
    ...
    <div class="row-form">
        <div class="span12">
            <span class="top title">Estado</span>

          <input type="checkbox"  id="estado_cat" class="ibtn">
       </div>
    </div>             
</div>

і jquery:

$("#estado_cat").prop( "checked", true );

Я також спробував attr, і інші, які бачили тут на форумах, але жоден, здається, не працює. Чи може хтось вказати мені правильний шлях?

EDIT: гаразд, мені тут дійсно щось не вистачає ... Я можу перевірити / зняти прапорець за допомогою коду, якщо прапорець знаходиться на сторінці, але це в модальному вікні, я не можу. Я спробував десятки різних способів ...

У мене є посилання, яке повинно відкрити модальний:

та jquery для "прослуховування" клацання та виконання деяких операцій, таких як заповнення деяких текстових полів даними з бази даних. Все працює так, як я хочу, але проблема полягає в тому, що я не можу встановити прапорець прапорець / галочку за допомогою коду. Допоможіть, будь ласка!

$(function() {
 $(".editButton").click(function(){
       var id = $(this).data('id'); 
       $.ajax({
          type: "POST",
          url: "process.php",
          dataType:"json",
          data: { id: id, op: "edit" },
        }).done(function( data ) {
//the next two lines work fine, i.e., it grabs the value from database and fills the textboxes
          $("#nome_categoria").val( data['nome_categoria'] );
          $("#descricao_categoria").val( data['descricao_categoria'] );
//then I tried to set the checkbox checked (because its unchecked by default) and it does not work
           $("#estado_cat").prop("checked", true);
        $('#fModal').modal('show');
});
    evt.preventDefault();
    return false;
    });     
});

який клас застосовується до модального діла при відкритті модалу? Також як ви перевіряєте значення бази даних - Використовуючи AJAX або це вже попередньо встановлено та зберігається у змінній?
користувач1428716

встановити прапорець після завантаження модального вікна. Я думаю, ви встановлюєте прапорець перед завантаженням модального вікна. $ ('# fModal'). модальний ('показ'); $ ("# estado_cat"). attr ("перевірено", "перевірено");
Vineeth Bhaskaran

Відповіді:


805

ви повинні використовувати функцію 'опора':

.prop('checked', true);

Перед jQuery 1.6 (див . Відповідь користувача2063626 ):

.attr('checked','checked')

5
Ви, здається, маєте правильну відповідь. Не могли б ви детальніше? stackoverflow.com/a/5876747/29182
Ziggy

1
Це добре знати. Не помітили цього, переглядаючи міграційну документацію jQuery 3.3.x
reaper_unique

1
Приємно знати, що ви не можете використовувати attr у новіших версіях jQuery, як я спочатку думав
Калоян

75

Приймаючи всі запропоновані відповіді та застосовуючи їх до моєї ситуації - намагаюся встановити або зняти прапорець на основі отриманого значення true (слід встановити прапорець) або false (не слід перевіряти прапорець) - я спробував усе вищезазначене та з'ясували, що правильне рішення використовували .prop ("перевірено", правда) та .prop ("перевірено", помилково ).

Я поки не можу додати коментарів чи відповідей, але я вважав, що це досить важливо, щоб додати до розмови.

Ось довгий код для модифікації fullcalendar, який говорить, якщо отримане значення "allDay" є істинним, то встановіть прапорець з ідентифікатором "even_allday_yn":

if (allDay)
{
    $( "#even_allday_yn").prop('checked', true);
}
else
{
    $( "#even_allday_yn").prop('checked', false);
}

48
Чому б не просто на одному єдиному рядку? $( "#even_allday_yn").prop('checked', allDay);
Xavier Hayoz

3
Він намагався продемонструвати можливі цінності. Як би ви дізналися реальну цінність "allDay" без такого прикладу, як цей тут?
Соруш Фалахаті

1
@Xavier Hayoz. Це працює, якщо і лише якщо allDay повертає "true" або "false" як літтеральне значення - не чисте бінарне. Прапорці погано розроблені в html, і їх зареєстрований стан може бути виражений дуже різними способами. Мені відомо про безпечний і єдиний спосіб: allDay === 'true'? $ ('# even_allday_yn) .prop ("перевірено", правда): $ (' # even_allday_yn) .prop ("перевірено", помилково). Зауважте суворого оператора рівності.
Бріс Кустільяс

1
$('#even_allday_yn').prop('checked', allDay === true)буде працювати, тому що allDay === trueдає бульний результат.
leftclickben

58

Чувак спробуйте нижче код:

$("div.row-form input[type='checkbox']").attr('checked','checked')

АБО

$("div.row-form #estado_cat").attr("checked","checked");

АБО

$("div.row-form #estado_cat").attr("checked",true);

26
Як і у відповіді KeyOfJ, використовуйте .prop('checked', true)замість attr- я просто зіткнувся з тим же питанням і propпрацює.
semmelbroesel

3
FYI, якщо ви хочете скористатися :checkedпсевдоселектором або іншими нативними функціями HTML, ви повинні використовувати .prop.
Бенастан

1
Спробував це, і це не спрацювало, але коли я змінив код на $ ("div.row-form #estado_cat"). Prop ("перевірено", "перевірено"); це спрацювало. (Змінено attr для опори).
Джим Еванс

1
На жаль, підтримка є jQuery 1.6 і вище, тому якщо ви застрягли у спадщині, яка не буде працювати для вас
wolffer-east

.attr()це шлях для більш ранніх версій, .prop()для jQuery 1.6+.
vapcguy

26

"Позначено" атрибут "галочками", як тільки він існує. Отже, щоб встановити / зняти прапорець, потрібно встановити / зняти атрибут.

Для перевірки прапорця:

$('#myCheckbox').attr('checked', 'checked');

Щоб зняти прапорець:

$('#myCheckbox').removeAttr('checked');

Для тестування перевіреного стану:

if ($('#myCheckbox').is(':checked'))

Сподіваюся, це допомагає ...


19

Оскільки ви знаходитесь у модальному вікні (будь то динамічне чи на сторінці), ви можете використовувати наступний код для досягнення своєї мети: (Я зіткнувся з тією ж проблемою на своєму сайті, і це я вирішив)

HTML:

<div class="content-container" style="text-align: right;">
    <input type="checkbox" id="QueryGroupCopyQueries">
    <label for="QueryGroupCopyQueries">Create Copies</label>                                                   
</div>

КОД:

$.each(queriesToAddToGroup, function (index, query) {
    if (query.groupAddType === queriesGroupAddType.COPY) {

        // USE FIND against your dynamic window and PROP to set the value
        // if you are using JQUERY 1.6 or higher.
        $(kendoWindow).find("input#QueryGroupCopyQueries").prop("checked", true);

        return;
    }

У наведеному вище "kendoWindow" - це моє вікно (моє динамічне, але я також це роблю, додаючи елемент безпосередньо на сторінці). Я переглядаю масив даних ("queriesToAddToGroup"), щоб побачити, чи є у будь-яких рядків атрибут COPY. Якщо так, я хочу включити прапорець у вікні, яке встановлює цей атрибут, коли користувач зберігає з цього вікна.


4
Слід зазначити, що в той час як інші відповіді на відповідне питання можуть "спрацьовувати", якщо використовувати propцю відповідь, це ПРАВИЛЬНИЙ спосіб здійснити динамічну перевірку / скасування прапорця jQuery.
Джошуа Бернс

11
.attr("checked",true)
.attr("checked",false)

Працюйте. Переконайтесь, що істина і хибність не є цитатами.


1
Attr не перевірить прапорець, підтвердження - це те, що потрібно зробити чек. Як .prop('checked', true); більш детальну інформацію в цьому
дописі

@casivaagustin Залежить від версії jQuery. Я вважаю, що раніше, ніж jQuery 1.6, .attr()працював, як описано.
vapcguy

5

Ви можете написати так, як наведено нижче коду.

HTML

<input type="checkbox"  id="estado_cat" class="ibtn">

jQuery

$(document).ready(function(){
    $(".ibtn").click(function(){
        $(".ibtn").attr("checked", "checked");
    });
});

Сподіваюся, це спрацює для вас.


4

Якщо ви хочете використовувати цю функціональність для сценарію GreaseMonkey, щоб автоматично встановити прапорець на сторінці, майте на увазі, що просто встановлення встановленої властивості може не викликати пов'язані дії. У цьому випадку, мабуть, "натиснувши" прапорець, можливо, (і встановіть також позначену властивість).

$("#id").click()

3
$("#divParentClip").find("#subclip_checkbox")[0].checked=true;

Find поверне масив, тому використовуйте [0], щоб отримати навіть, якщо є лише один елемент

якщо ви не використовуєте пошук, то

$("#subclip_checkbox").checked=true;

це добре працювало в Mozilla Firefox для мене


1
Це працює, всі інші рішення не виявляються, якщо у вас є: перевірений стиль у своєму css
bhappy


2

Спробуйте це, оскільки ви, мабуть, використовуєте інтерфейс jQuery (якщо не прокоментуйте, будь ласка)

 $("#fModal" ).dialog({
     open: function( event, ui ) {

     if(//some hidden value check which stores the DB value==expected value for
      checking the Checkbox)

         $("div.row-form input[type='checkbox']").attr('checked','checked');

    }
   });

@ user2063626 - частина js всередині функції скопійована з вашої відповіді
user1428716

2

Ви спробували запустити $("#estado_cat").checkboxradio("refresh")свій прапорець?



2

Я також зіткнувся з цією проблемою.

і ось мій старий не працює код

if(data.access == 'private'){
     Jbookaccess.removeProp("checked") ; 
    //I also have tried : Jbookaccess.removeAttr("checked") ;
 }else{
    Jbookaccess.prop("checked", true)
}

ось мій новий код, який зараз працює:

if(data.access == 'private'){
     Jbookaccess.prop("checked",false) ;
 }else{
    Jbookaccess.prop("checked", true)
}

Таким чином, ключовий момент є перед тим, як він працював, переконайтесь, що перевірена властивість існує та чи не була її видалена.


Набагато простіше:Jbookaccess.prop("checked", data.access != 'private');
Легіонер

2

Це відбувається тому, що ви з новітньою версією jquery attr('checked')повертаєтесь, 'checked'а prop('checked')повертаєтесь true.


2
<body>
      <input id="IsActive" name="IsActive" type="checkbox" value="false">
</body>

<script>
    $('#IsActive').change(function () {
         var chk = $("#IsActive")
         var IsChecked = chk[0].checked
         if (IsChecked) {
          chk.attr('checked', 'checked')
         } 
         else {
          chk.removeAttr('checked')                            
         }
          chk.attr('value', IsChecked)
     });
</script>

це добре працює в хромі та firefox
reza akhlaghi

1

Установіть прапорець після завантаження модального вікна. Я думаю, ви встановлюєте прапорець перед завантаженням сторінки.

$('#fModal').modal('show');
$("#estado_cat").attr("checked","checked");

1

Я знаю, що це вимагає рішення Jquery, але я хоч би зазначив, що перемикати це в простому javascript дуже просто.

var element = document.getElementById("estado_cat");
element.checked = 1;

Він працюватиме у всіх поточних та майбутніх версіях.


0
<div class="custom-control custom-switch">
      <input type="checkbox" class="custom-control-input" name="quiz_answer" id="customSwitch0">
      <label class="custom-control-label" for="customSwitch0"><span class="fa fa-minus fa-lg mt-1"></span></label>
  </div>

Не забудьте збільшити ідентифікатор і атрибут відповідно. Для динамічно доданого завантажувального вікна.

$(document).on('change', '.custom-switch', function(){
    let parent = $(this);
    parent.find('.custom-control-label > span').remove();
    let current_toggle = parent.find('.custom-control-input').attr('id');
    if($('#'+current_toggle+'').prop("checked") == true){
        parent.find('.custom-control-label').append('<span class="fa fa-check fa-lg mt-1"></span>');
    }
    else if($('#'+current_toggle+'').prop("checked") == false){
        parent.find('.custom-control-label').append('<span class="fa fa-minus fa-lg mt-1"></span>');
    }
})
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.