Jquery Dom и функции в теле HTML - PullRequest
0 голосов
/ 27 апреля 2010

У меня есть <script>...</script> перед моим закрывающим тегом здесь у меня есть обычный

$(function() {
   function test(){
      alert("test");
   }
});

в моем HTML у меня есть входные теги <input type="text" onchange="test()" />

Я получаю сообщение об ошибке этого теста не определено. Я пытаюсь сделать функцию вызова IE7 onchange У меня было целое решение, работающее, но поскольку IE7 не нравится .change(), я собираюсь поместить атрибуты onchange во входные данные, но теперь у меня есть эта проблема.

Есть идеи, как мне это решить?

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

test неизвестно, поскольку оно локально для анонимной функции (обработчик ready) и не доступно внешнему миру. Эта функция - просто обработчик ready, который вызывается, когда DOM страницы готов. Если вы хотите выставить test, вам нужно сделать что-то вроде этого:

var eventHandlers = $(function() {
   function test() {
      alert("test");
   }

   return {test: test};
})();

Это немного излишне и необходимо, только если вы используете шаблон модуля и инкапсуляцию. Теперь вы можете использовать eventHandlers.test(). Если инкапсуляция не является проблемой, я рекомендую привязать jQuery в обработчике ready:

jQuery(document).ready(function(){
    jQuery("#myInput").bind("change", function() {
      alert("test");
    });
});

Вы также можете просто определить функцию как:

function test() {
  alert("test");
}

Что было бы самым простым способом. Тем не менее, я рекомендую не смешивать разные способы ведения дел. Если вы используете jQuery, продолжайте делать все с помощью jQuery.

0 голосов
/ 27 апреля 2010

Чтобы использовать его таким образом, он нужен вне этой области, используйте только this, без document.ready wrap:

function test(){
  alert("test");
}

Если вы поместите его в обработчик document.ready, он будет доступен только в этой области, для этого вам нужно объявить функцию снаружи. Однако вы можете сделать это полностью и в jQuery, например:

HTML:

<input type="text" id="myElem" />

JQuery:

$(function() {
  $('#myElem').change(function() {
    alert("test");
  });
});
//or, if you wanted the external function for another reason:
$(function() {
  $('#myElem').change(test);
});
function test(){
  alert("test");
}
0 голосов
/ 27 апреля 2010

если вы используете jquery, везде используйте jquery.

$(document).ready(function(){

$('input').bind('change',function(){
alert("hi");
});

});
...