2010-10-22 19 views
6

Hey, j'ai une question pour javascript. J'ai besoin d'assigner une valeur href à une balise d'ancrage ou à un asp: HyperLink. QUELQUE CHOSE. cela me permettra de lier du texte dans une fenêtre de dialogue à un href qu'une fonction spécifie. Voici mon code.Modifier le href d'un tag d'ancrage avec javascript

<'custom:JQueryDialog I made' runat=server ID="dialogPopUp" AutoOpen="false" 
    CloseOnEscape="true" Modal="true" Title="Download" width="300px"> 
    //I will spare you all of the div tags for formatting 
    <a runat="server" id="downloadLink" target="_blank" class="'css with an icon'" 
     href=""></a> 
</'custom:JQueryDialog I made'> 

Maintenant, je dois obtenir un fso de la base de données puisque c'est là que l'information est stockée. Ce fso est différent en fonction de ce que la classe de réflecteur d'entité envoie à ce javascript. J'ai une fonction qui formate les chaînes javascript similaires à C# que j'ai trouvées. J'ai alors une autre fonction qui obtient le fso de la classe de réflecteur d'entité. Cela marche. J'ai testé la chaîne en l'affichant dans une alerte et cela fonctionne très bien. Le problème que je rencontre est de définir le href de la balise d'ancrage avec javascript. Je deviens fou! S'il vous plaît aider!

Format String:

String.format = function() { 
    var s = arguments[0]; 
    for (var i = 0; i < arguments.length - 1; i++) { 
     var reg = new RegExp("\\{" + i + "\\}", "gm"); 
     s = s.replace(reg, arguments[i + 1]); 
    } 
} 

Ma tentative de changer href:

function changeHref(fso) { 
    var downloadHref = String.format("Download.ashx?fso={0}", fso); 
    $('#<%= this.downloadLink.ClientID %>').href = downloadHref; 
    showDialog(<%= this.'custom dialog i made'.ClientID %>); 
} 

Le lien de téléchargement est changé et tout. Je ne peux pas sembler être en mesure de régler cela! Ai-je manqué l'ordre du chargement de la page? Ai-je besoin de faire cela après le chargement de la page entière puisque les articles pourraient ne pas être encore générés? J'ai essayé deux ou trois choses différentes. Je pourrais vraiment utiliser une direction.

Répondre

5

Vous ne pouvez pas référencer directement href à partir d'un objet jQuery. Tout ce que vous faites est de créer une nouvelle propriété. Modifier pour définir l'attribut par attr comme ça ...

$('#<%= this.downloadLink.ClientID %>').attr("href", downloadHref); 

Pour être complet, je dois mentionner que vous pouvez arriver à l'élément DOM sous-jacente en utilisant la syntaxe de tableau, et vous pouvez définir le href avec Javascript régulier ...

var domElem = $('#<%= this.downloadLink.ClientID %>')[0]; // DOM element is at 0 
domElem.href = downloadHref; 

En outre, une autre erreur probable, je pense que vous avez besoin des citations ici ...

showDialog("<%= this.'custom dialog i made'.ClientID %>"); 
+0

Je fais cela avec une fonction javascript régulière. Cela n'a pas cette fonction .attr? ne fonctionne pas avec cette syntaxe. – Tom

+0

Je l'ai compris. C'est .attr ('href', downloadHref); – Tom

0

Cette ligne est incorrecte. Pour définir le HREF, vous devez accéder à la fonction attr de jQuery.

$('#<%= this.downloadLink.ClientID %>').attr("href", downloadHref); 
0

Votre javascript doit être exécuté une fois le chargement de la page terminé.

La façon jQuery de le faire:

$(document).ready(function() { init() }) 


function init() { 
    $('#<%= this.downloadLink.ClientID %>').attr("href", downloadHref); 
    //Josh's code above 

}