2010-02-03 2 views
1

Dans ma page, il y a deux boutons d'ancrage 'Conatct Selected', l'un en haut ayant id comme "selectAllLink" et l'autre en bas ayant l'id comme "selectAllLinkB" de la page. Celui du haut fonctionne parfaitement en utilisant le script suivant:Un seul script peut-il être utilisé pour deux ou plusieurs clics de bouton d'ancrage?

<script type="text/javascript"> 

$(function() { 
    $('#selectAllLink').each(function() { 
     var a = []; 
     var n = $("td.title_listing input:checked"); 
     var s = ""; 

     n.each(function() { 
      a.push(this.value); 
     }); 
     s = a.join(','); 

     if (a.length > 0) 
      this.href = "/D_ContactSeller.aspx?property=" + s; 
     else 
      this.href = 'javascript:alert("Select at least one property to contact!");'; 
     return false; 
    }); 
}); 

maintenant mon bouton d'ancrage bas j'ai essayé de mettre son ID comme « selectAllLinkB » et a changé le code comme ceci:

<script type="text/javascript"> 

    $(function() { 
     $('#selectAllLink, selectAllLinkB').each(function() { 
      var a = []; 
      var n = $("td.title_listing input:checked"); 
      var s = ""; 
      ..... 
      ..... 
      ..... 
    }); 

Existe-t-il une méthode simple pour appeler le script à la fois pour l'événement de bouton d'ancrage? en attente de la réponse rapide et bonne. Merci à l'avance ...

Répondre

1

Vous avez pris la peine d'utiliser JavaScript discret pour modifier le href, et vous avez même jQuery. Il n'y a vraiment aucune raison d'être en utilisant cette méthode

this.href = 'javascript:alert("Select at least one property to contact!");'; 

Au lieu de cela, vous devriez envisager d'utiliser une méthode d'enregistrement d'événement plus moderne:

$(function() { 
    $('#selectAllLink, #selectAllLinkB').click(function(e) { 
     var a = []; 
     $("td.title_listing input:checked").each(function() { 
      a.push(this.value); 
     }); 

     if (a.length) { 
      this.href = "/D_ContactSeller.aspx?property=" + a.join(','); 
     } else { 
      e.preventDefault(); 
      alert("Select at least one property to contact!"); 
      return false; 
     } 
    }); 
}); 
+0

Merci pour votre réponse ... J'ai eu ce que vous voulez dire ... merci beaucoup. – Sanju

+0

Eh bien, cela fonctionne parfaitement ... Merci. Mais j'ai toujours un problème. Quand il n'y a pas de case à cocher est sélectionné, il donne un message javascript. Et après avoir cliqué sur 'ok', il commence à charger une fausse page Iframe sur la page. Et en un clic de souris, il s'éteint. Avez-vous une idée de comment puis-je supprimer ce problème? Merci d'avance .. – Sanju

+0

De quel iframe parlez-vous? Je ne vois pas dans le code que vous avez posté. En outre, vous pouvez essayer de renvoyer false à partir de l'instruction 'else'. –

4

Vous êtes assez proche. Le sélecteur doit être '#selectAllLink, #selectAllLinkB'. Toutefois, vous pouvez utiliser la méthode click au lieu de each pour enregistrer un événement click au lieu de définir les attributs href au moment du chargement. Maintenant, vous obtenez les cases à cocher qui sont vérifiées lorsque la page se charge, pas lorsque le lien est cliqué.

+0

bien qui fonctionne parfaitement ... Merci. Mais j'ai toujours un problème. Quand il n'y a pas de case à cocher est sélectionné, il donne un message javascript. Et après avoir cliqué sur 'ok', il commence à charger une fausse page Iframe sur la page. Et en un clic de souris, il s'éteint. Avez-vous une idée de comment puis-je supprimer ce problème? Merci d'avance .. – Sanju

+0

@Sanju: Il semble que vous ayez un autre code qui charge l'Iframe. Regardez le code de Justin pour un exemple sur la façon d'accepter l'objet événement en tant que paramètre et utilisez la méthode preventDefault pour arrêter le clic afin qu'il ne déclenche rien d'autre. – Guffa

0

je changerais de l'id à une classe et donc quelque chose comme:

<script type="text/javascript"> 

$(function() { 
    $('.selectAllLink').each(function() { ... 
    } 
} 
+0

Pourquoi? J'aurais pensé que l'utilisation du sélecteur d'identifiant serait plus rapide car il utiliserait la fonction getElementById et ne devrait pas traverser le DOM pour trouver l'élément –

+0

+1 Il est plus performant de spécifier l'ID oui, mais quand vous commencez à définir la même fonctionnalité pour Plus d'un élément, il est plus propre de créer une classe pour identifier cette collection d'éléments. Cela vous permet également d'ajouter n'importe quel nombre d'éléments à la collection simplement en appliquant la classe * sans * avoir à modifier le JavaScript (ce qui est parfois une exigence selon l'équipe de développement). Le compromis est donc la lisibilité et l'évolutivité/facilité d'utilisation par rapport à une augmentation de performance (probablement négligeable). Un benchmark serait intéressant à voir. –

Questions connexes