Я думаю, что самый близкий стандарт приходит к утверждению, что неопределенное поведение - это то, где он определяет поведение для объединения, содержащего общую начальную последовательность (C99, §6.5.2.3 / 5):
Для упрощения использования профсоюзов существует одна специальная гарантия: если объединение содержит несколько структур, которые имеют общую начальную последовательность (см. Ниже), и если объект объединения в настоящее время содержит одну из этих структур, разрешается проверять общие начальная часть любого из них в любом месте, где видна декларация полного типа объединения. Две структуры имеют общую начальную последовательность, если соответствующие члены имеют совместимые типы (и для бит-полей, одинаковые ширины) для последовательности из одного или нескольких начальных элементов.
blockquote>C ++ 11 дает аналогичные требования / разрешения в §9.2 / 19:
Если объединение стандартного макета содержит две или более структуры стандартного макета, которые совместно используют общую начальную последовательность, и если объект объединения стандартного макета в настоящее время содержит одну из этих структур стандартной компоновки, разрешено проверять общую начальную часть любого из них. Две структуры стандартного компоновки имеют общую начальную последовательность, если соответствующие члены имеют совместимые с макетами типы, и ни один из них не является битовым полем, либо оба являются битовыми полями с одинаковой шириной для последовательности из одного или нескольких начальных элементов.
blockquote>Хотя ни один из них не является прямым, оба они имеют сильное значение, что «проверка» (чтение) члена «разрешена» только , если 1) она (часть) член, который недавно был написан, или 2) является частью общей исходной последовательности.
Это не прямой оператор, который делает иначе, это неопределенное поведение, но это самый близкий из которых я знаю.
1) Включите jQuery перед всеми вашими сценариями:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="js/captcha/jquery.clientsidecaptcha.js" type="text/javascript"></script>
2) После этого определите переменную $
для функции jQuery следующим образом:
<script type="text/javascript">
(function($){
function EnableApply() {
var OriginalCaptcha = $('#careersForm').data('captchaText');
var userCapcha = $('#captchaText').val();
if (OriginalCaptcha == userCapcha) {
$('#careerbtn').removeAttr('disabled');
}
else {
$('#careerbtn').attr('disabled', 'disabled');
}
}
function RegisterCapcha() {
$("#captcha").html(''); //reset the generated captcha first
$("#captchaText").val('');
$("#careersForm").clientSideCaptcha({
input: "#captchaText",
display: "#captcha",
});
}
}(jQuery));
</script>
Для использования JQuery plug-in (library) вам нужно сначала импортировать Jquery.
Лучше всего импортировать все скрипты в конце вашего HTML.
Позаботьтесь о порядок (JQuery).
Пример импорта JQuery (онлайн-версия).
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
По какой-то причине вы не хотите, чтобы сценарий импорта заканчивался, не Забудьте:
$(document).ready(function(){//code});
Перед загрузкой некоторых модулей требуется HTML-код для загрузки. Итак, скрипт начинает заканчиваться.
После загрузки jQuery
<script src='jquery.js'></script>
if (typeof $ == 'undefined') {
var $ = jQuery;
}
Ссылка:
укажите последние jquery перед всеми тегами скрипта. найти последний jquery в https://code.jquery.com/ или использовать cdn
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>