2009-08-26 5 views
1

J'ai un lien et en cliquant sur le lien je veux définir la valeur d'une variable de drapeau à 1. Est-ce possible? CommePuis-je définir une valeur dans la fonction onclick?

<a id='ctr' href='#' onclick='flag=1'> Hello </a>  

Et aussi comment écrire la fonction pour l'événement onclick sur la même ligne, comme au lieu de

<a id='ctr' href='#' onclick='call_this();'> Hello </a> 
function call_this(){ 
    flag=1; 
} 

puis-je avoir la fonction call_this dans la ligne onclick elle-même?

EDIT2

Maintenant, j'ai le code comme celui-ci. Dans l'événement onclick, la valeur est correctement stockée dans $ selectedId. Mais quand j'essaye de passer cette valeur dans l'url, je n'obtiens pas la valeur correcte. La dernière valeur de la boucle for est transmise.

<script type="text/javascript"> 

$(document).ready(function(){ 

<?php foreach ($Forms as $r): ?> 

    $("<a id='<?php echo $ctr['Form']['id'];?> href='#' onclick='flag=1'> Hello </a>").appendTo("#header").click(function(){ 
    <?php $selectedId=$r['Form']['id'];?> 
    alert("selId: "+<?php echo $selectedId;?>);//here the selected value is echoed 
}); 
</script> 

<a href="http://localhost/Example/new/export?height=220&width=350&id=<?php echo $selectedId;?>" class="thickbox button" title= "Export" >Export</a> 

Ici, l'identifiant est passé à 4, ce qui est la dernière valeur de la boucle php for.

+0

Vous devriez vraiment changer votre utilisation de 'et' pour permettre une syntaxe d'attribut correcte attributename = "valeur-attribut" Au lieu de

Répondre

0

Oui, vous pouvez mettre l'indicateur en onclick (mais ce drapeau doit être globale)

<script>var flag=null;</script> 
<a id='ctr' href='#' onclick='flag=1'> Hello </a> 

et oui vous pouvez définir en ligne de fonction.

<a id='ctr' href='#' onclick='function call_this(){flag=1;};call_this();'> Hello </a> 

Mais je dois vous avertir que ce n'est pas la bonne conception. Mieux vaut avoir tous les javascript dans les fichiers js. Et mettre en place seulement des gestionnaires.

0

Vous pouvez avoir les deux codes JS dans la propriété onclick des éléments, mais généralement c'est une solution moche et vous devriez l'éviter. Il est préférable de placer tous vos scripts JS dans un bloc séparé ou dans un fichier séparé et de l'appeler à partir de là.

8

Puisque vous avez un ID sur votre élément d'ancrage, vous pouvez facilement le trouver et lier l'événement.

Si c'est une action simple, vous pouvez utiliser une fonction anonyme plutôt que de devoir déclarer une fonction de la portée mondiale:

window.onload = function() { 

    // Bind events... 

    document.getElementById('ctr').onclick = function() { 
    flag1 = 1; 
    return false; // stop the browser from following the link 
    }; 

    // .... 
}; 

Edit: En regardant votre édition, l'événement jQuery document.ready se déclenche lorsque le chargement de la page, à ce moment-là votre drapeau a encore null affecté.

Notez que vous ajoutez uniquement l'élément d'ancrage au DOM, puis vous effectuez une instruction if.

Puisque vous utilisez jQuery, vous pouvez l'utiliser pour lier l'événement click à l'élément nouvellement créé:

var flag=null; 

$(document).ready(function(){ 
    $('<a id="ctr" href="#"> Hello </a>').appendTo('#header').click(function() { 
    flag = 1; 
    e.preventDefault(); // stop the browser from following the link 
    }); 
}); 

Vous pouvez le faire puisque la fonction appendTo renvoie l'élément DOM nouvellement créé, et vous pouvez lier des événements directement à lui.

+1

six réponses et seulement une qui sait de quoi ils parlent +1 –

+0

Cela va poser un problème, cependant si elle est exécutée avant que' ctr 'soit complètement chargé. pour lier une fonction à l'événement window.onload, et exécuter ce code à l'intérieur –

+0

@James: d'accord, édité ... – CMS

1

Oui et oui.

Pour tester # 1, j'ai ajouté une alerte comme ceci:

<a id='ctr' href='#' onclick='flag=1; alert(flag);'>Hello</a> 

Pour tester le numéro # 2, j'ai ajouté une alerte ainsi:

<a id='ctr' href='#' onclick='function call_this() { flag=1; alert(flag); } call_this();'>Hello</a> 
2

Oui, avec peu d'ajustement, il devrait travail. Mais vous devez savoir que la meilleure pratique pour l'utilisation de javascript est ALL votre javascript dans un fichier externe. Cela garde votre code HTML "propre", facilite l'édition et vous donne un meilleur aperçu de ce qui se passe.

contenu du fichier my.html:

<html> 
    <head> 
     <title>hello :-)</title> 
     <script language="javascript" src="my.js" type="text/javascript"></script> 
    </head> 
<body> 
    <a href="#" id="ctr">Set var value</a><br /> 
    <a href="#" id="check">Check var value</a> 
</body> 
</html> 

Contenu du fichier my.js:

var flag = 0; 

function init() 
{ 
    var ctr_element = document.getElementById('ctr'); 
    ctr_element.onclick = function() 
    { 
     flag = 1; 
     return false; 
    } 

    var check_element = document.getElementById('check'); 
    check_element.onclick = function() 
    { 
     alert(flag); 
     return false; 
    } 
} 

window.onload = init; 

PS. Même une meilleure pratique serait l'utilisation d'une classe, de sorte que vous avez moins de risque d'écraser accidentellement vos variables. (surtout lorsque vous utilisez également des bibliothèques de 3ème partie, etc.). Mais je vous recommande de laisser cela pour un autre jour, lorsque vous êtes assez confiant sur vos compétences.

Si vous êtes intéressé par l'écriture en tant que code compatible avec les navigateurs, vous pouvez jeter un oeil à des bibliothèques comme prototype, jquery ou dojo. (il y en a plus) Ils rendent votre vie js tellement plus facile :-)

Questions connexes