Jquery: вызов функции по имени при выборе изменения
Я пытаюсь вызвать функцию по имени .onchange
для выбора, но ничего не происходит. Когда функция описывается после атрибута, она работает.
ЭТО НЕ РАБОТАЕТ
HTML:
<select id="numb">
<option value="1">1</option>
<option value="2">2</option>
</select>
SCRIPT:
<script type="text/javascript">
$('#numb').change(testMessage);
</script>
<script type="text/javascript">
function testMessage(){
alert('Hello');
}
</script>
ЭТО РАБОТЫ
HTML:
<select id="numb">
<option value="1">1</option>
<option value="2">2</option>
</select>
SCRIPT:
<script type="text/javascript">
$('#numb').change(function(){
alert('Hello')
});
</script>
EDIT:
Хорошо, для всех тех, кто сказал мне включить функцию в тот же script. Это невозможно, потому что функция testMessage()
находится во внешнем .js
script, включенном в <head>
HTML.
Ответы
Ответ 1
Это потому, что обработчик testMessage
не определяется при привязке его к событию изменения.
Он должен работать, если он был в том же контексте script, как показано ниже,
<script type="text/javascript">
$('#numb').change(testMessage);
function testMessage(){
alert('Hello');
}
</script>
Код внутри <script></script>
выполняется один за другим с прогрессивной вершиной, а функция testMessage
не существует внутри первого <script></script>
.
У вас есть пара вариантов,
-
Поместите его в анонимную функцию, которая позволит вашему script разрешить функцию testMessage
позже. [Как предложено в Optimus Prime)
<script type="text/javascript">
$('#numb').change(function () {
testMessage
});
</script>
<script type="text/javascript">
function testMessage(){
alert('Hello');
}
</script>
-
Включите script, у которого есть функция testMessage
выше script
, которая связывает testMessage, как показано ниже,
<script type="text/javascript">
function testMessage(){
alert('Hello');
}
</script>
<script type="text/javascript">
$('#numb').change(testMessage);
</script>
Ответ 2
Вместо этого попробуйте
<script type="text/javascript">
$('#numb').change(function(){
testMessage();
});
</script>
Ответ 3
Рабочая Jsfiddle
попробуйте следующее:
<script type="text/javascript">
$('#numb').on('change',testMessage);
</script>
Ответ 4
Попробуйте это и поместите в тег script:
<script type="text/javascript">
$(document).ready(function(){
$('#numb').change(testMessage);
function testMessage(){
alert('Hello');
}
});
</script>
Ответ 5
Вы должны определить обратный вызов функции изменения.
<script type="text/javascript">
$('#numb').change(function(){
testMessage();
);
function testMessage(){
alert('Hello');
}
</script>
Это должно решить вашу проблему.
Ответ 6
Я не думаю, что ваша ссылка существует еще в функции здесь, это два способа, которыми вы могли бы это сделать.
Я поместил версию с именами в качестве предложения, потому что это могло бы помочь очистить ваш код в целом.
HTML:
<select id="numb">
<option value="1">1</option>
<option value="2">2</option>
</select>
SCRIPT:
//Именованные пространства и использование прокси
<script type="text/javascript">
var project = project || {};
project = {
testMessage: function (event) {
alert('Hello');
}
};
$('#numb').change($.proxy(project.testMessage, project));
</script>
//Только что объявленный
<script type="text/javascript">
function testMessage(){
alert('Hello');
}
$('#numb').change(function(event) {
testMessage();
});
</script>
Если ваш метод находится в другом файле, убедитесь, что вы включили этот файл перед тем, который связан с привязкой события. Вы получаете какие-либо ошибки консоли?