2010-10-22 23 views
6

Hej, mam pytanie do javascript. Muszę przypisać wartość href do znacznika zakotwiczenia lub asp: HyperLink. COŚ. to pozwoli mi połączyć tekst w wyskakującym okienku dialogowym z hrefem, który określa funkcja. Oto mój kod.Zmiana href znacznika zakotwiczenia za pomocą 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'> 

Teraz muszę uzyskać fso z bazy danych, ponieważ tam przechowywane są informacje. To fso jest różne w zależności od tego, co klasa reflector jednostki wysyła do tego javascriptu. Mam funkcję, która formatuje łańcuchy javascript podobne do C#, które znalazłem. Następnie mam inną funkcję, która pobiera fso z klasy reflektora jednostki. To działa. Przetestowałem ciąg, wyświetlając go w ostrzeżeniu i działa dobrze. Problem, który mam, polega na ustawianiu hrefu znacznika anchor za pomocą javascript. Oszalam! Proszę pomóż!

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]); 
    } 
} 

Moja próba zmiany 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 %>); 
} 

Link do pobrania zostanie zmieniony i wszystko. Po prostu nie mogę tego ustawić! Czy brakuje mi kolejności wczytywania strony? Czy muszę to zrobić po załadowaniu całej strony, ponieważ elementy mogą nie zostać jeszcze wygenerowane? Próbowałem kilku różnych rzeczy. Naprawdę mógłbym użyć kierunku.

Odpowiedz

5

Nie można odwoływać się bezpośrednio do obiektu href z obiektu jQuery. Wszystko, co robisz, to tworzenie nowej własności. Zmień go, aby ustawić atrybut przez attr jak to ...

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

Dla uzupełnienia należy wspomnieć, że może dostać się do bazowego elementu DOM za pomocą składni tablicy, a następnie można ustawić href z regularne JavaScript ...

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

również inny prawdopodobny błąd, myślę, że trzeba tu cytaty ...

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

robie to z regularnym funkcji javascript. To nie ma tej funkcji .attr? nie działa z tą składnią. – Tom

+0

Wymyśliłem to. To jest .attr ('href', downloadHref); – Tom

0

Ten wiersz jest niepoprawny, aby ustawić HREF, aby uzyskać dostęp do funkcji jQuery za pomocą attr.

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

Twój javascript musi działać po zakończeniu ładowania strony.

JQuery sposób to zrobić:

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


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

} 
Powiązane problemy