2010-03-08 8 views
1

Je suis à la fin de mon esprit avec cela.Checkbox onclick pas de tir

Quelqu'un peut-il voir quelque chose de mal avec cette ligne? La fonction ne se déclenche pas en cliquant sur la case à cocher pour une raison quelconque, mais la fonction appelante fonctionne bien (si je copie l'attribut exact "onclick" sur l'étiquette pour la case à cocher, cela fonctionne bien).

<input type="checkbox" name="match_35_0" id="match_35_0d" value="d0" onclick="checkSwap(document.page_form.match_35_0d, document.page_form.match_35_0)"></input> 

Si quelqu'un peut voir pourquoi diable cela ne fonctionnerait pas, je l'apprécierais vraiment.

Merci!

EDIT: Comme un couple de personnes ont demandé, voici la fonction checkSwap (tout ce qu'il fait est de lancer une alerte afin que je puisse voir que mes onclicks travaillent avant d'ajouter tout code):

function checkSwap(radioid, groupid) { 
alert("radio: " + radioid + " group: " + groupid);} 

Et voici la ensemble de l'échantillon de la cellule de table que la case en question est (mes excuses pour la mise en forme, l'exemple de code ne semble pas vouloir accepter mes nouvelles lignes):

<td><label onclick="checkSwap(document.page_form.match_34_0d,document.page_form.match_34_0)" for="match_34_0">N</label><input type="checkbox" name="match_34_0" id="match_34_0d" value="d1" onclick="checkSwap(document.page_form.match_34_0d, document.page_form.match_34_0)"></input></td> 

EDIT: d'accord, annulant une fonction distincte qui limitait le checkboxgroup à 1 case cochée était le problème .

Le code qui fait la limite a été de définir un attribut onclick pour chaque case, et qui est l'attribut primordial apparemment définir un tag. Je vais devoir trouver comment le contourner.

+0

Vous devez avoir une fonction appelée "checkSwap" déclarée quelque part, pouvez-vous publier ce code? Regardez aussi dans Firebug pour Firefox pour quelques bons outils de débogage javascript. –

+0

Vous ne savez pas pourquoi le fait de cliquer ne fonctionne pas, mais avez-vous essayé de vous lier à "onchange"? Pour une case à cocher, le comportement devrait être identique. –

+3

Il n'y a pas de balise de fin pour l'élément 'input' –

Répondre

1

Cette syntaxe

document.page_form.match_35_0d 

recherches en fait sous la forme avec nom de page_form pour un élément d'entrée avec nom dematch_35_0d. Mais vous avez réellement le définir comme un id de la case où le onclick est DÉFINIES.

Vous pouvez résoudre votre problème avec l'appel suivant dans le onclick:

checkSwap(this, document.page_form.match_35_0) 

Par ailleurs, une case à cocher est pas la même chose comme RadioButton et vous êtes en train de ne pas passer les ID à la fonction, mais à la place éléments entiers. Ressaisissez votre fonction

function checkSwap(checkbox, group) { 
    var checkboxId = checkbox.id; 
    for (var i = 0; i < group.length; i++) { 
     var element = group[i]; 
     var elementId = element.id; 
     // ... 
    } 
    // ... 
} 

Pour obtenir un élément par ID, il suffit d'utiliser Document#getElementById().

var element = document.getElementById('someId'); 
+0

Ah, je n'étais pas au courant de cela (je n'ai pas fait beaucoup de JS, comme je suis sûr que vous pouvez le dire). Vous me passez en 'this' comme un argument - cela a un sens appelé depuis la propriété onclick de la case à cocher. Cependant, quelle serait la syntaxe correcte pour accéder à cette case à cocher spécifique par identifiant? J'ai un label que j'aimerais aussi que les utilisateurs puissent cliquer pour exécuter ma fonction de checkswap - d'après ce que je peux dire, la façon la plus simple de le faire serait d'appeler checkbox.onclick, mais je Je ne sais pas comment pointer sur l'objet checkbox spécifique par ID. – javanix

+0

Utilisez 'document.getElementById ('id')'. – BalusC

+0

Excellent, cela semble bien fonctionner. Merci pour l'aide. – javanix

-1

Il serait plus facile de passer this à la fonction, le paramètre serait une référence à l'élément qui a appelé la fonction. Ainsi, vous pouvez faire:

function checkSwap(self){ 
    alert(self.id); 
} 

Edit: En outre, document.page_form.match_35_0.id va obtenir l'ID, pas comme vous l'avez.

0

cette fonction fait feu - cochée dans Firebug

<input type="checkbox" name="match_35_0" id="match_35_0d" value="d0" onclick="alert('55')"></input> 

vous devez vérifier 'checkSwap'

0

Si vous possédez déjà la fonction de Jquery, l'attribut Onclick de la commande ckeckbox ne sera pas activé. Vous devez ajouter l'événement click dans Jquery. Seulement alors cela fonctionne Comme ci-dessous. Je ne connais pas la raison.

$('#cbFinalAttest').click(function (event) { 
    ... 
} 
+0

Ceci n'est pas une réponse complète. La question ne contient pas jQuery, donc votre réponse devrait discuter COMMENT inclure/utiliser jQuery, puis la fonction ready, etc. –

1

Si la méthode ready de JQuery est déjà définie, l'événement Chek box onclick ne fonctionne pas. Vous pouvez déclencher l'événement si vous ajoutez un événement de clic Jquery à l'intérieur de prêt. Je ne sais pas si c'est un problème d'IE ..?