2010-01-20 3 views
3

Je suis actuellement en train de travailler sur un front-office complet 100% javascript CMS de la nôtre, et j'ai un problème. Certaines zones modifiables que l'utilisateur peut modifier sont contenues dans le lien href. Ces href ne sont PAS éditables, pourtant, lorsque l'utilisateur clique sur ces zones (alors qu'en mode édition) le navigateur suit ces liens.JQUERY href problème de désactivation

D'abord, Heres un exemple de code HTML généré par le CMS:

<span id ="8a8b8d2e262bde2d01262c08317c000c" class="document"> 

    <a href="/actions/ecommerce/viderSelectionPalierEtVitrine"> 
      <img src="/images/logo.gif" id="8a8b8d2e262bde2d01262c08bf83000d" title="" alt="" class="image logo" /> 
    </a>   
</span> 

Ici, par exemple, l'utilisateur ne peut changer; J'ai donc essayé de gérer les environs href de cette façon:

 var referenceZone = $(this).attr("id"); 
    $("#"+documentId+" a").each(function() { 
     $(this).click(function() { 
      return false; 
     }); 
    }); 

Où referenceZone est mon entourage <span id ="8a8b8d2e262bde2d01262c08317c000c" class="document">

Est-ce aussi difficile que cela me semble?

< **** **** EDIT> Ajout d'un bac à sable à des fins de test ici: http://jsbin.com/aboke/2

< **** EDIT 2 ****> Ce que je ne comprends pas que alerte (event.type) ne s'allume même pas !!

//click event disabling on any href of curently edited ${"span.document"} 
    $("span#" + documentId + " a").click(function(event) { 
       alert(event.type); 
       event.preventDefault(); 
     suppressionZoneModifiable(documentId); 
      recupererTexte(referenceZone, documentId); 
    });   

Répondre

2

Le code de votre sandbox au http://jsbin.com/aboke/2 comporte de nombreuses erreurs. Voici quelques-unes:

1. l'argument de la fonction est une chaîne, mais passée en nombre

Vous devriez mettre des guillemets autour de l'argument ici:

renduZonesModifiables(8a8b8d2e262bde2d01262c08317c000c); 

2. L'argument ne pas correspondre à l'ID de portée

8a8b8d2e262bde2d01262c08317c000c vs. 8a8b8d2e262bde2d01262c08bf83000d

3.Vous utilisez onclick au lieu de clic dans jQuery

$(this).onclick = function() { return false; } 

devrait être

$(this).click(function(e) { 
    e.preventDefault(); 
}); 

4. Vous avez une erreur js

") manquant après la liste des arguments" (ligne 81)

+0

J'ai rayé toute la merde autour pour me concentrer sur cette chose preventDefault(). Jetez un oeil à http://jsbin.com/aboke/4, rien ne semble fonctionner ... je suis puzzeld ... – pixelboy

-1
$(this).click(function() { 
    return false; 
}); 

^ne fonctionne pas. L'utilisation de $(...).click() ajoute cette fonction à la liste des fonctions qu'il exécute lors d'un clic. Cela ne supprime pas le comportement par défaut de suivre le lien.

Vous pouvez remplacer l'action de lien par défaut en faisant:

this.onclick = function() { return false; } 
+0

Allez vérifier http://jsbin.com/aboke/2, ne semble pas fonctionner. – pixelboy

+0

Désolé, mais j'ai downvoted, car il est effectivement possible d'utiliser jQuery. – Kordonme

+0

Pas de problème! J'ai appris quelque chose de nouveau! :) –

3

Oui, il est possible, mais pas par la déclaration de retour. Utilisez preventDefault();

var referenceZone = $(this).attr("id"); 
$("#"+documentId+" a").click(function(event) { 
    event.preventDefault(); 
}); 

En outre, il n'y a pas besoin de faire un .each(), sauf si vous faites quoi que ce soit d'autre avec les liens. Mais utilisez event.preventDefault().

Voir rest of the documentation.

+0

Utilisation de event.preventDefault(); ne semble pas changer la donne, mais j'ai édité mon post pour ajouter ce que j'ai testé ... – pixelboy

+0

Par souci de clarté, 'event.preventDefault()' résout à ** return false ** dans IE en utilisant jQuery, mais 'preventDefault' est l'abstraction préférée, même si les deux "fonctionne". – David