Я работаю на сайте. На этом сайте есть страница регистрации reg.cgi, которая использует шаблон registration.tmpl. Я включил некоторые javascript в registration.tmpl. Код javascript имеет простую функцию, которую нужно вызывать каждый раз, когда пользователь меняет параметр выбора (onchange = "myCoolFunction()"), но он не будет запускаться. Я думаю, это из-за Perl. Может быть, мне нужно изменить reg.cgi, или я ошибаюсь.
В хром-консоли есть одна ошибка:
Определение:
$(document).ready(function(){
function myCoolFunction() {
if ($("#payment_card").val() == '00') {
$('input[name="cvv2"]').prop('disabled',true);
}
if ($("#payment_card").val() == 'VI') {
$('input[name="cvv2"]').val("");
$('input[name="cvv2"]').removeAttr('disabled');
$('input[name="cvv2"]').attr('maxlength','3');
}
if ($("#payment_card").val() == 'AM') {
$('input[name="cvv2"]').val("");
$('input[name="cvv2"]').removeAttr('disabled');
$('input[name="cvv2"]').attr('maxlength','4');
}
};
}
);
И звонок:
<select id="payment_card" onchange="myCoolFunction()">
<option value="00"></option>
<option value="VI">VISA, MC</option>
<option value="AM">AMEX</option>
</select>
Я тестировал простой javascript + HTML локально, и ошибок не было. Это сработало, но онлайн на сервере с cgi он не будет работать. Если у кого-то есть опыт работы с.cgi + tmpl + javascript, было бы здорово помочь или посоветовать мне. Правильно ли включать javacript в.tmpl, что используется в.cgi? Спасибо.
Я решил это с помощью window.onload и удалил document.ready, ниже определения функции: window.onload = function(){myCoolFunction()};
Я получаю ту же ошибку в Chrome после вставки кода, скопированного из jsfiddle. Я думаю, вы столкнулись с одной и той же проблемой.
Если вы выберете весь код с панели в jsfiddle и вставьте его в Notepad++, вы должны увидеть характер проблемы как знак вопроса "?" в самом конце вашего кода. Удалите этот знак вопроса, затем скопируйте и вставьте код из Notepad++, и проблема не исчезнет.
Что касается myCoolFunction() is not defined
. Пожалуйста, поделитесь своим кодом, чтобы мы могли видеть, где вы делаете неправильно.
Изменить: (на основе вашего ответа, почему он не работает на jsFiddle)
JSFiddle обертывает ваш код javascript в вызове onLoad по умолчанию, поэтому myFunction определяется только в этой области функций. Перейдите в No wrap-in, и ваш код будет работать, как ожидалось. Смотрите, это работает: http://jsfiddle.net/chankeypathak/SB3gd/2/