OnChange не определена

Это должно быть что-то простое. Я искал в Интернете и только нашел синтаксические ошибки в качестве причины этой проблемы, но я не могу найти синтаксическую ошибку.

Здесь javascript:

<script type="text/javascript" src="http://localhost/acrilart/javascript/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        function hi(){
            alert('hi');
        }
        hi();
    });
</script>

И HTML:

<input type="text" name="cep" value="" id="cep" class="required cep field"
       onChange="hi()" />

В pageload функция hi вызывается как ожидалось, но мое событие onChange вызывает ошибку Firebug, говоря, что функция не определена. Я действительно в тупике. Я ошибался "привет"?

Ответ 1

Функция hi доступна только в области внутри обработчика события ready. Переместите его за пределы обработчика событий или обработайте привязку внутри (и удалите атрибут обработчика события inline из разметки):

$(document).ready(function(){
    function hi(){
        alert('hi');
    }
    $("#cep").on("change", hi);
});

Ответ 2

Функция hi определена только в блоке ready. Снаружи он больше не существует.

Вам не нужно обертывать определения функций в .ready(), поэтому просто удалите его. В качестве альтернативы определите функцию следующим образом:

window.hi = function() {...}

Ответ 3

В вашем блоке кода:

<script type="text/javascript">
    $(document).ready(function(){
        function hi(){
            alert('hi');
        }
        hi();
    });
</script>

hi не является глобальной функцией. Вы можете получить доступ к нему только в пределах области function(){...}, а не снаружи.

Поскольку вы используете jQuery, вы можете изменить способ привязки своей функции к событию onChange. Вместо того, чтобы вызывать его из тега html, вы можете написать:

<script type="text/javascript">
    $(document).ready(function(){
        function hi(){
            alert('hi');
        }
        hi();

        $('#cep').on( 'change', function(){ hi(); } );
    });
</script>

Ответ 4

<script src="http://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript"> 
function hi(){ 
    alert('hi'); 
} 
</script>

<input type="text" name="cep" value="" id="cep" class="required cep field" onKeyPress="javascript:hi();" />

Ответ 5

onchange запускается только тогда, когда элемент управления размыт. Вместо этого попробуйте onkeypress.

$("#cep").on("change", function() {
   alert(1);
});

или

<input type="text" name="cep" value="" id="cep" class="required cep field" 
onkeypress="hi()"  />

Используйте следующие события вместо onchange:

- onkeyup(event)
- onkeydown(event)
- onkeypress(event)

Ответ 6

Попробуйте так, это может уменьшить ваши усилия.

<select (change) = "myFunc($event)">
      <option>option</option>
</select>