функция 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, говоря, что функция не определена. Я действительно в тупике. Я mispell "привет"?

5 ответов


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

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

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

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

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

<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();" />

onchange срабатывает только тогда, когда контроль размыто. Попробуй!-Вместо -4-->.

$("#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)

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

<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>