JQuery - вызов функции в строке - PullRequest
5 голосов
/ 22 августа 2009

Я пытаюсь передать одну переменную встроенной функции jQuery (то есть: используя onMouseOver="function();" в фактической ссылке (которая является тегом области на карте изображения)).

Функция вызывается только в том случае, если я помещаю ее перед строкой $(document).ready(function(){, но это вызывает все виды проблем с jQuery.

Все, что мне нужно, - это простой тег (такой как <area shape="circle" coords="357,138,17" onMouseOver="change('5');" id="5" />) для запуска функции, которая содержится в обычном теле кода jQuery.

Большое спасибо за любую помощь, которую вы можете предложить.

Чтобы проиллюстрировать это, работаем:

<script type="text/javascript">
function myfunction(x)    {  alert(x); //Alerts 2  
}
</script>

<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>

Но следующее не

<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
function myfunction(x)    {  alert(x); //Nothing happens   
}
}
</script>

<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>

Ответы [ 2 ]

9 голосов
/ 22 августа 2009

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

Есть два решения.

Во-первых, вы можете объявить это вне (до или после) вызова .ready(). Это не должно создавать помехи для jQuery. Если это так, то что-то не так (возможно, простая синтаксическая ошибка?), И мы приглашаем вас задать вопрос StackOverflow.

Во-вторых, вы не должны использовать onMouseOver="" для присоединения обработчиков событий (так как это смешивает JavaScript с HTML), поэтому давайте покончим с этим полностью. Замените свой JavaScript следующим:

$(document).ready(function() {
    $("#that-area-down-there").mouseover(function() {
        alert(2);
    });
});

И ваш HTML с этим:

<area shape="rect" coords="171,115,516,227" id="that-area-down-there" />

(Предположительно, вы захотите заменить это id на что-то более значимое в контексте, конечно.)

1 голос
/ 22 августа 2009

Есть две причины, почему код не работает. Прежде всего, вам не хватает закрывающей скобки при вызове функции ready, поэтому вы получаете синтаксическую ошибку.

Во-вторых, функция, которую вы определяете внутри функции, существует только в этой области. Когда вы выходите из функции, ее больше не существует.

Пример:

$(document).ready(function(){
   function myfunction(x) {
      alert(x);
   }
   myfunction(42); // here it works
}

myfunction(-1); // here it doesn't exist

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

$(document).ready(function(){
  myfunction = function(x) {
    alert(x);
  }
});
...