2010-10-29 5 views
14

J'utilise SVG avec jQuery dans mon application Mvc. Je dessine une série de rectangles sur ma page et ce que je voudrais faire est d'attacher un clic ou un événement mouseover pour chaque rectangle, par exemple, popup une boîte d'alerte. J'ai essayé quelque chose comme ça, jusqu'à présent:Evénement Click pour le rectangle SVG

$("rect[id='Y6']").attr('onclick', function() { alert("Hello!") }); 

et

$("rect[id='Y6']").live('click', function() {  
    alert("Hello!"); 
}; 

Mais malheureusement aucun de ces événements vraiment travaillé pour ce contrôle. Est-ce que quelqu'un sait comment faire cela?

EDIT:

J'ajoute le code javascript J'utilise ci-dessous:

<script type="text/javascript"> 
    /*function resetSize(svg, width, height) { 
     svg.configure({ width: width || $(svg._container).width(), 
      height: height || $(svg._container).height() 
     }); 
    }*/ 
    function onLoad(svg, error) { 
     //svg.text(10, 20, error || 'Loaded into ' + this.id); 
     //resetSize(svg, null, null); //'100%', '100%'); 
    } 

    $(function() { 
     $('#layout').svg({}); 

     var svg = $('#layout').svg('get'); 
     svg.load('<%= Url.Action("Layout", new{ id = Model.Id }) %>', { //<%= Url.Content("~/media/svg/lion.xml") %>', { 
      addTo: false, 
      changeSize: false, 
      onLoad: onLoad 
     }); 
    });  

$('rect#Y6').click(function(){ 
    alert('hello'); 
}); 

</script> 

Les rectangles sont chargés à partir d'une image svg.

Répondre

15

Votre code pour ajouter le gestionnaire click doit faire partie de la fonction onLoad - avec ce changement it works for me.

+1

Merci Robert, après avoir essayé d'écrire comme tu l'as suggéré, ça a marché! Merci beaucoup! – Hallaghan

+0

Pour d'autres, je luttais avec un événement de clic mobile et cela fonctionne avec '$ (document) .on ('click touch', '.button', function() {...});' –

+0

Discrimination contre les triangles est. – geotheory

2

Essayez ceci:

$('rect#Y6').click(function(){ 
    alert('hello'); 
}); 
+0

Ça n'a pas marché non plus, Ken. J'apprécie l'aide cependant. Le contrôle a été rendu comme suit: Hallaghan

+0

@Hallaghan, il semble fonctionner ici: http: //jsfiddle.net/YcV3c/. –

+0

Maintenant, c'est assez étrange. En utilisant firebug, je remarque que lorsque je charge la page, elle entre correctement dans l'événement click. Mais en cliquant sur le rectangle, rien ne se passe réellement et l'événement n'est jamais déclenché. Avez-vous la moindre idée? EDIT: Si vous voulez voir mon code jquery ou connaître les détails de mes fichiers, je les ajouterai dans mon commentaire. – Hallaghan