Другим случаем, когда NullReferenceExceptions
может случиться, является (неправильное) использование оператора as
:
class Book {
public string Name { get; set; }
}
class Car { }
Car mycar = new Car();
Book mybook = mycar as Book; // Incompatible conversion --> mybook = null
Console.WriteLine(mybook.Name); // NullReferenceException
Здесь Book
и Car
являются несовместимыми типами; a Car
не может быть преобразован / передан в Book
. Когда этот сбой завершается неудачно, as
возвращает null
. Используя mybook
после этого, вы вызываете NullReferenceException
.
В общем случае вы должны использовать cast или as
, как показано ниже:
Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:
ComicBook cb = (ComicBook)specificBook;
Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as
:
ComicBook cb = specificBook as ComicBook;
if (cb != null) {
// ...
}
Чтобы получить значение атрибута Value, вы можете сделать что-то вроде этого:
$("input[type='checkbox']").val();
Или, если вы установили для него class
или id
, вы можете:
$('#check_id').val();
$('.check_class').val();
Однако это вернет то же значение, независимо от того, проверено оно или нет, это может сбивать с толку, поскольку оно отличается от поведения представленной формы.
Чтобы проверить, проверено ли оно или нет , do:
if ($('#check_id').is(":checked"))
{
// it is checked
}
Эти два способа работают:
$('#checkbox').prop('checked')
$('#checkbox').is(':checked')
(thanks @mgsloan)
$('#test').click(function() {
alert("Checkbox state (method 1) = " + $('#test').prop('checked'));
alert("Checkbox state (method 2) = " + $('#test').is(':checked'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Check me: <input id="test" type="checkbox" />
Вот как получить значение всех отмеченных флажков как массив:
var values = (function() {
var a = [];
$(".checkboxes:checked").each(function() {
a.push(this.value);
});
return a;
})()
Просто для выяснения вещей:
$('#checkbox_ID').is(":checked")
Вернет 'true' или 'false'
$ ('. class [значение = 3]'). prop ('checked', true);
jQuery(".checkboxClass").click(function(){
var selectedCountry = new Array();
var n = jQuery(".checkboxClass:checked").length;
if (n > 0){
jQuery(".checkboxClass:checked").each(function(){
selectedCountry.push($(this).val());
});
}
alert(selectedCountry);
});
Несмотря на то, что этот вопрос задает решение jQuery, вот чистый ответ на JavaScript, поскольку никто его не упоминал.
Просто выберите элемент и доступ к свойству checked
(который возвращает логическое значение).
var checkbox = document.querySelector('input[type="checkbox"]');
alert(checkbox.checked);
<input type="checkbox"/>
Ниже приведен быстрый пример прослушивания события change
:
var checkbox = document.querySelector('input[type="checkbox"]');
checkbox.addEventListener('change', function (e) {
alert(this.checked);
});
<input type="checkbox"/>
Чтобы выбрать отмеченные элементы, используйте :checked
pseudo class (input[type="checkbox"]:checked
).
Вот пример, который выполняет итерацию над отмеченными элементами input
и возвращает сопоставленный массив имен проверенных элементов.
var elements = document.querySelectorAll('input[type="checkbox"]:checked');
var checkedElements = Array.prototype.map.call(elements, function (el, i) {
return el.name;
});
console.log(checkedElements);
var elements = document.querySelectorAll('input[type="checkbox"]:checked');
var checkedElements = Array.prototype.map.call(elements, function (el, i) {
return el.name;
});
console.log(checkedElements);
<div class="parent">
<input type="checkbox" name="name1" />
<input type="checkbox" name="name2" />
<input type="checkbox" name="name3" checked="checked" />
<input type="checkbox" name="name4" checked="checked" />
<input type="checkbox" name="name5" />
</div>
//By each()
var testval = [];
$('.hobbies_class:checked').each(function() {
testval.push($(this).val());
});
//by map()
var testval = $('input:checkbox:checked.hobbies_class').map(function(){
return this.value; }).get().join(",");
//HTML Code
<input type="checkbox" value="cricket" name="hobbies[]" class="hobbies_class">Cricket
<input type="checkbox" value="hockey" name="hobbies[]" class="hobbies_class">Hockey
Пример Демонстрация
Простой, но эффективный и предполагает, что вы знаете, что флажок будет найден:
$("#some_id")[0].checked;
Дает true
/ false
<script type="text/javascript">
$(document).ready(function(){
$('.laravel').click(function(){
var val = $(this).is(":checked");
$('#category').submit();
});
});
<form action="{{route('directory')}}" method="post" id="category">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input name="category" value="{{$name->id}}" class="laravel" type="checkbox">{{$name->name}}
</form>
Использовать этот $ ('input [name ^ = CheckBoxInput]'). val ();
$('#checkbox_id').val();
$('#checkbox_id').is(":checked");
$('#checkbox_id:checked').val();
Попробуйте это небольшое решение:
$("#some_id").attr("checked") ? 1 : 0;
или
$("#some_id").attr("checked") || 0;
Единственными правильными способами получения значения флажка являются следующие
if ( elem.checked )
if ( $( elem ).prop( "checked" ) )
if ( $( elem ).is( ":checked" ) )
, как описано в официальных документах на веб-сайте jQuery. Остальные методы не имеют ничего общего с свойством флажка, они проверяют атрибут, что означает, что они проверяют начальное состояние флажка при его загрузке. Короче говоря:
elem.checked
), или вы можете используйте $(elem).prop("checked")
, если вы хотите полагаться на jQuery. $(elem).is(":checked")
. Ответы вводят в заблуждение, проверьте сами: