2013-02-23 2 views
303

Я уже пробовал все возможные способы, но я все еще не работал. У меня есть модальное окно с checkbox. Я хочу, чтобы при открытии модального файла отметьте или снимите отметку checkbox на основе значения базы данных. (У меня есть уже работающие с другими полями формы.) Я начал проверять его, но это не сработало.jquery set checkbox checked

Мой HTML ДИВ:

<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 «слушать» щелчок и выполнить некоторые операции, такие как заполнение некоторых текстовые полей с приходом данных из база данных. Все работает так, как я хочу, но проблема в том, что я не могу установить checkbox check/unchecked с помощью кода. Помоги пожалуйста!

$(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; 
    });  
}); 
+1

Ваш модальный динамически создается? –

+0

Какой класс применяется к модальному div при открытии модальной формы? Также как вы проверяете значение базы данных - с помощью AJAX или уже предварительно запрограммировано и хранится в переменной? – user1428716

+0

Zoltan: нет, его на странице не динамически – psopa

ответ

37

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

$("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); 
+3

попробовал ... не работает ... :( – psopa

+17

Как и в ответе KeyOfJ, используйте '.prop ('checked', true)' вместо 'attr' - я просто столкнулся с той же проблемой, и' prop' работает. – semmelbroesel

+2

FYI, если вы хотите использовать псевдо-селектор ': checked' или другие собственные функции HTML-кода, вы должны использовать' .prop'. – benastan

2

Попробуйте это, так как ваш используете JQuery UI, вероятно, (если нет, пожалуйста, комментарии)

$("#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'); 

    } 
    }); 
+0

@ user2063626 - часть js внутри функции копируется из ваш ответ – user1428716

+0

пользователь1428716 - попробовал ... не работает ... – psopa

16

Поскольку вы находитесь в модальном окне (будь то динамическое или на странице), вы можете использовать следующий код для достижения своей цели: (я столкнулся с той же проблемой на своем сайте, и именно так я ее исправил)

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. –

4

Вы можете написать, как указано ниже.

HTML

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

JQuery

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

Надеется, что это работает для вас.

2

Вы пробовали использовать $("#estado_cat").checkboxradio("refresh") на вашем флажке?

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

Поиск будет возвращать массив, поэтому используйте [0], чтобы получить, даже если есть только один пункт

, если вы не используете найти то

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

это работало хорошо в Mozilla Firefox для меня

+1

Это работает, все другие решения не обнаруживаются, если у вас есть стиль: checked в вашем css – bhappy

528

вы должны использовать функцию 'пропеллер':

.prop('checked', true); 

Перед JQuery 1.6 (см user2063626's answer):

.attr('checked','checked') 
+4

У вас, кажется, правильный ответ. Не могли бы вы уточнить? http://stackoverflow.com/a/5876747/29182 – Ziggy

2

Это работает.

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

Это происходит потому, что вы с новейшей версии JQuery attr('checked') возвращает 'checked' в то время как prop('checked') возвращает true.

3

Работал для меня:

$checkbok.prop({checked: true}); 
+0

пользователь $ ("# estado_cat"). attr ("checked", "checked"); –

1

Я тоже столкнулся с этой проблемой.

и вот мой старый не работает код

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) 
} 

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

+0

Гораздо проще: 'Jbookaccess.prop (« checked », data.access! = 'Private');' – Legionar

1

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

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

Принимая во внимание все из предложенных ответов и применить их к моей ситуации - пытается установить или снять флажок, основываясь на извлеченной значение истины (следует установить флажок) или ложь (не флажок) - Я попробовал все вышеперечисленное и нашел, что с помощью .prop («checked», true) и .prop («checked», false) были правильными решениями.

Я еще не могу добавить комментарии или ответы, но я чувствовал, что это достаточно важно, чтобы добавить к разговору.

Вот обыкновенное письмо код для модификации fullcalendar, который говорит, если полученное значение «AllDay» истинно, то установите флажок с идентификатором «even_allday_yn»:

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

Почему не только на одной строке? '$ (" #even_allday_yn "). prop ('checked', allDay);' –

+0

Он пытался продемонстрировать возможные значения. Как бы вы знали реальную ценность «allDay» без примера, подобного этому здесь? –

+1

@ Xavier Hayoz. Это работает, если и только если allDay возвращает «true» или «false» как значение litteral, а не чистую двоичную. Флажки явно сконструированы в html, и их проверенный статус может быть выражен совсем по-разному. Безопасное и единственное, что я знаю, это: allDay === 'true'? $ ('# even_allday_yn) .prop ("checked", true): $ (' # even_allday_yn) .prop ("checked", false). Обратите внимание на строгий оператор равенства. –

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

будет work.Make уверен true и false не являются внутренними кавычками.

+0

Attr не проверяет флажок, оповещение - это тот, который нужно проверить. Как '.prop ('checked', true);' [Дополнительная информация в этом сообщении] (http://learn.jquery.com/using-jquery-core/faq/how-do-i-check-uncheck-a -checkbox-input-or-radio-button /) – casivaagustin

+0

@casivaagustin Зависит от версии jQuery. Я считаю, что раньше, чем jQuery 1.6, '.attr()' работал, как описано. – vapcguy

11

«checked» атрибут «галочки» флажок, как только он существует. Чтобы проверить/снять флажок, вам нужно установить/отключить атрибут.

Для проверки коробки:

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

Для убрав окно:

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

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

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

Надеется, что это помогает ...