jQuery-chamando uma função inline

estou a tentar passar uma variável para uma função jQuery inline (ie: usando um onMouseOver="function();" dentro da ligação actual (que é uma marca de área de um mapa de imagem).

a função só está a ser chamada se a colocar antes da linha $(document).ready(function(){, mas fazer isto está a causar todo o tipo de problemas com o jQuery.

tudo o que eu quero é uma tag simples (como <area shape="circle" coords="357,138,17" onMouseOver="change('5');" id="5" /> para lançar uma função que está contida dentro do corpo normal de código jQuery.

Muito obrigado por toda a ajuda que puder. oferecer.

para ilustrar o ponto, as seguintes obras:

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

mas o seguinte não

<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>
Author: Patrick Beardmore, 2009-08-22

2 answers

No seu segundo exemplo, declarou:myfunction dentro da função anónima para a qual estás a passar. Isso significa myfunction é uma variável local, que está apenas no escopo dentro dessa função anônima, e você não pode chamá-la de qualquer outro lugar. Há duas soluções.

Primeiro, você pode declará-lo fora (antes ou depois) a chamada para .ready(). Isto não deve causar qualquer interferência com o jQuery. Se o fizer, algo mais está errado (talvez um erro de sintaxe simples?) que nós gostaríamos que você trouxesse para cima em uma pergunta StackOverflow.

Em segundo lugar, você não deveria estar usando onMouseOver="" para anexar manipuladores de eventos( como isso mistura JavaScript com HTML), Então vamos acabar com isso completamente. Substitua o seu JavaScript por isto:

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

E o seu HTML com isto:

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

(presumivelmente você vai querer substituir isso id por algo mais significativo no contexto, é claro.)

 9
Author: VoteyDisciple, 2009-08-22 13:02:04
Há dois motivos para o código não funcionar. Em primeiro lugar, você está faltando um parêntesis de fechamento na chamada para a função ready, então você obtém um erro de sintaxe.

Em segundo lugar, a função que você define dentro da função só existe nesse escopo. Quando você sai da função ela já não existe.

Exemplo:

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

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

Você pode definir a função globalmente a partir de dentro da função como esta:

$(document).ready(function(){
  myfunction = function(x) {
    alert(x);
  }
});
 1
Author: Guffa, 2009-08-22 13:15:07