2009-09-11 9 views
6

J'ai pensé/cherché un équivalent du problème que j'ai ci-dessous, et rien n'a pu être trouvé. Y a-t-il un moyen de réécrire cela pour travailler avec jQuery comme alternative?Conversion de "document.getElementById" en jQuery

Première moitié du code.

<a href="link.php?test=true" onclick="request(this)" target="_blank"> 

<a id="step2" href="javascript:alert('NOT FINISHED!');"> 

Deuxième moitié du code.

<script language="javascript"> 
var requests = 16; 

function request(self) 
{if(self.href != "#") 
requests -= 1; 

self.childNodes[0].src = "images/clear.gif"; 

if(requests === 0) 
document.getElementById("step2").href = "next.php";} 
</script> 

Alors que je veux faire une chose type de requête var jQuery. Je veux onclick="request(this) de travailler avec mon jQuery.

+1

Changer le href est assez facile, mais je n'ai aucune idée de ce que vous essayez vraiment de faire. Peut-être qu'une explication de ce que vous essayez d'accomplir serait utile. Changer simplement le href seul semble plutôt inutile en tant qu'action. – tvanfosson

+0

J'ai 5 boutons, et je le veux où chaque fois qu'un bouton est frappé, il le demande, de sorte qu'après que les demandes sont satisfaites, il va changer le href pour "id (about)". Actuellement le href = "#" leur permettant de ne pas procéder, pour ainsi dire? – Homework

Répondre

10

La réponse à votre question (titre) est de remplacer

document.getElementById('about').href = '#'; 

avec

$('#about').attr('href','#'); 

Je ne sais pas si cela va réellement h Cependant, vous résolvez votre problème, car je ne sais vraiment pas ce que vous essayez de faire. En fonction de vos commentaires et de votre exemple de code, il semble que vous essayez de faire un certain type d'assistant, mais je n'ai aucune idée de la façon dont cela fonctionnerait réellement compte tenu de ce que vous avez posté.

Mise à jour:

Peut-être quelque chose comme:

<a href="link.php?test=true" onclick="request(this)" target="_blank" class='request'></a> 

<a id="step2" href="next.php">Step 2</a> 

<script language="javascript"> 
    $(function() { 
     var requests = 16; 
     $('#step2').click(function() { 
      alert('Not finished'); 
      return false; 
     }); 
     $('.request').click(function() { 
      var $this = $(this); // save jQuery reference to element clicked 

      // swap indicator image source 
      $this.find('img:first').attr('src','images/clear.gif'); 

      // if the number of flipped indicators equals the number of requests 
      // remove the click handler from the step 2 link 
      // this removes the alert and allows the user to proceed 
      if ($('.request img[src="images/clear.gif"]').length == requests) { 
       $('#step2').unbind('click'); 
      } 

      ...do something with the href for this request via ajax??? 

      // replace this handler with one that simply returns false 
      // and remove the href since we're done with this request 
      $(this).unbind('click').attr('href','#').click(function() { return false; }); 

      // stop the default action for the request 
      return false; 
    }); 
</script> 
2

Comme ça? Je pense que je suis manquant/ne pas comprendre quelque chose si ...

$('#about').click(function(evt) { 
    request(this); 
}); 
0

Ce? Pas sûr que je reçois bien ce que vous voulez

function request(element) 
{ 
    $(element).doSomething(); 
    return false; 
} 

invoquaient par:

onclicked="return request(this);" 
+0

Demande le? Qu'Est-ce que c'est? La page sur le lien? – tvanfosson

+0

Pourquoi ne pas simplement retirer complètement l'étiquette d'ancrage pour qu'elle ne puisse même pas cliquer dessus? – tvanfosson

2

Pour plus de commodité, vous pouvez définir une méthode supplémentaire sur l'objet $

$.getElementById = function(id){ 
    return $('#'+id).get(0); 
}; 

alors vous pouvez simplement changer tous vos appels de

document.getElementById 

à

$.getElementById 

Il y a des tonnes de mises en garde avec cela, mais il peut être utile en fonction de votre situation.

+0

Pourriez-vous donner un indice sur les mises en garde – nus