JS переопределяет проверку флажка при переключении [дубликат]

Попробуйте следующее:

install.packages('Rcpp')
install.packages('ggplot2')
install.packages('data.table')
41
задан John McCollum 10 December 2008 в 13:42
поделиться

10 ответов

Я сделал аналогичный подход, но просто используя проверенный атрибут, такой как

 //toggles checkbox on/off
    $("input:checkbox").change(
        function(){
           if(!this.checked){
             this.checked=true;
           }
           else{
             this.checked=false;
           }
         }
       );
 //end toggle
52
ответ дан Andreas Grech 19 August 2018 в 19:00
поделиться
  • 1
    Спасибо за ваш вклад, но мне пришлось добавлять и удалять классы, а не проверять атрибуты - по какой-то причине я не мог получить эту работу. Я опубликую полное решение (по крайней мере, то, что сработало для меня) выше. Еще раз спасибо! – John McCollum 10 December 2008 в 13:19
  • 2
    Я всегда задавался вопросом о практической разнице между == и === ... что относительно этого сравнения делает необходимым? – Jay Corbett 10 December 2008 в 15:33
  • 3
    '==' выполняет принуждение типа (преобразование), что означает, что компилятор будет неявно попытаться преобразовать значения. Например, [1 == true // true], потому что он преобразует значение «true» в 1 ... но [1 === true // false], потому что число не равно логическому – Andreas Grech 10 December 2008 в 20:54
  • 4
    вместо $ (this) .attr («checked») вы можете просто вызвать this.checked и он вернет проверенное значение – Sergey 25 January 2010 в 03:42
  • 5
    if ($ (this) .is (: checked)) // лучший способ проверить – kasp3r 2 December 2010 в 10:05
52
ответ дан Andreas Grech 31 October 2018 в 05:15
поделиться
$('input#myId').toggle(
  function(e){
    e.preventDefault();
    //do stuff      
    $(this).attr('checked', 'true');
  },
  function(e){
    e.preventDefault();
    //do other stuff        
    $(this).attr('checked', 'false');
  }
);
1
ответ дан adam 19 August 2018 в 19:00
поделиться

Это ответ MorningZ (я нашел здесь здесь ), что имеет смысл:

Недопустимая часть, так как «checkbox» - это объект jQuery, а не объект DOM checkbox DOM

so:

checkbox.checked наверняка будет ошибкой, потому что для объекта jQuery

нет свойства .checked, поэтому:

checkbox[0].checked будет работать, поскольку первый элемент в массиве jQuery является самим объектом DOM.

Итак, в вашей функции change() вы можете использовать

$(this)[0].checked
2
ответ дан blasteralfred Ψ 19 August 2018 в 19:00
поделиться

При использовании обработчика событий change, предложенного Dreas Grech, подходит, это не очень хорошо работает в IE 6 & amp; 7, который не запускает событие change до тех пор, пока фокус не будет размытым (то есть, пока вы не выйдете за пределы области флажка). Как и QuirksMode , «это серьезная ошибка».

Возможно, вы захотите использовать обработчик событий click, но это не будет работать с навигацией по клавиатуре. Вам также нужно зарегистрировать обработчик keyup ...

См. Также этот связанный вопрос .

Я еще не нашел хорошего кросс- браузерное решение, которое поддерживает как щелчки мыши, так и клавиатуру, активирует флажки (и не запускает слишком много событий).


Что касается вашего решения для проверки того, установлен флажок или нет, вместо добавления ваш собственный класс checked, вы можете использовать атрибут checked HTML:

$('input#myInput').change(function () {
    if ($(this).attr("checked")) {
        //do stuff if the checkbox is checked
    } else {
        //do stuff if the checkbox isn't checked
    }
});

Любой браузер устанавливает атрибут checked элемента input в значение "checked", если этот флажок установлен проверяется и устанавливает его на null (или удаляет атрибут), если флажок не установлен.

18
ответ дан Community 19 August 2018 в 19:00
поделиться

это сработало для меня ............ проверьте его

$(":checkbox").click(function(){
if($(this).attr("id").split("chk_all")[1])
 {
  var ty  = "sel"+$(this).attr("id").split("chk_all")[1]+"[]";
  if($(this).attr("checked"))
   {
    $('input[name="'+ty+'"]').attr("checked", "checked");
   }
  else
   {
    $('input[name="'+ty+'"]').removeAttr("checked");
   }
 }
})
1
ответ дан Haes 19 August 2018 в 19:00
поделиться
    $("input[type=checkbox][checked=false]")// be shure to set to false on ready
    $("input#Checkbox1").change(function() {
        if ($(this).attr("checked")) {
            $("#chk1").html("you just selected me")//the lable
        } else {$("#chk1").html("you just un selected me") }    
    });
0
ответ дан philljohn 19 August 2018 в 19:00
поделиться
  • 1
    работает для меня, и я использую его для проверки, прежде чем применяется какая-либо логика. Очень удобно обеспечить обратную связь с пользователем – philljohn 3 December 2010 в 02:13

почему бы не использовать $ .is ()?

$('input#myId').change(
    function() {
        if ($(this).is(':checked')) {
            // do stuff here 
        } else {
            // do other stuff here
        }
});
8
ответ дан solsTiCe 19 August 2018 в 19:00
поделиться

Попробуйте:

$(":checkbox").click(function(){
  if($(this).attr("checked"))
   {
    $('input[name="name[]"]').attr("checked", "checked");
   }
  else
   {
    $('input[name="name[]"]').removeAttr("checked");
   }
})
0
ответ дан sth 19 August 2018 в 19:00
поделиться
0
ответ дан sth 31 October 2018 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: