Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.
В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:
rb = GetComponent<Rigidbody>();
. Эта строка кода работает лучше всего под ваши функции Start()
или Awake()
. rb = AddComponent<RigidBody>();
Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))]
над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!
Изменить: Исходное решение в этом ответе неэффективно и не должно использоваться. См. Пересмотренное решение на основе комментариев и примеров из других ответов на этот вопрос.
Исходное (плохое) решение следует:
// DO NOT USE; SEE BELOW
$('button').click(function () {
var atLeastOneIsChecked = false;
$('input:checkbox').each(function () {
if ($(this).is(':checked')) {
atLeastOneIsChecked = true;
// Stop .each from processing any more items
return false;
}
});
// Do something with atLeastOneIsChecked
});
Использование .each () - избыточный в этом примере, так как .is () может использоваться непосредственно на множестве объектов, а не вручную, итерации через каждый из них. Ниже приведено более эффективное решение:
$('button').click(function () {
var atLeastOneIsChecked = $('input:checkbox').is(':checked');
// Do something with atLeastOneIsChecked
});
Обратите внимание, что один из комментариев указывает на сильную неприязнь к $(this).is(':checked')
. Чтобы уточнить, нет ничего плохого в is(':checked')
в тех случаях, когда вы тестируете набор объектов. Тем не менее, вызов is(':checked')
по одному элементу намного менее эффективен, чем вызов .checked
в том же элементе. Это также включает ненужный вызов функции $.
Вы должны попробовать вот так ....
var checkboxes = $("input[type='checkbox']"),
submitButt = $("input[type='submit']");
checkboxes.click(function() {
submitButt.attr("disabled", !checkboxes.is(":checked"));
});
is()
может это сделать и, возможно, является единственным приемлемым использованием is(":checked")
:
Из документов jQuery, http://api.jquery.com/ is / :
Проверьте текущий согласованный набор элементов на объект селектора, элемента или jQuery и верните true, если хотя бы один из этих элементов соответствует заданным аргументам .
blockquote>alert($("input[name='service[]']").is(":checked"));
Пример: http://jsfiddle.net/AndyE/bytVX/1/ ( на основе скрипки Брэндон Гано )
blockquote>В качестве альтернативы и потенциально быстрее вы можете передать функцию
is()
:$("input[name='service[]']").is(function () { return this.checked; });
Другой ответ:
!!$("[type=checkbox]:checked").length
или
!!$("[name=service[]]:checked").length
Это зависит от того, что вы хотите.
Это должно сделать трюк:
function isOneChecked() {
return ($('[name="service[]"]:checked').length > 0);
}
var checkboxes = document.getElementsByName("service[]");
if ([].some.call(checkboxes, function () { return this.checked; })) {
// code
}
То, что вы хотите, просто, получить все элементы с именем, а затем запустить некоторый код, если некоторые из этих элементов отмечены.
Нет необходимости в jQuery.
Возможно, для устаревших браузеров может потребоваться прокладка ES5, хотя
вам нужно проверить, установлен ли флажок или нет.
$("#select_all").click(function(){
var checkboxes = $("input[type='checkbox']");
if(checkboxes.is(":checked"))
alert("checked");
else
alert("select at least one;
});
var atLeastOneIsChecked = $('input[name="service[]"]:checked').length > 0;