2010-10-22 25 views
6

Hola, tengo una pregunta para javascript. Necesito asignar un valor de href a una etiqueta de anclaje o asp: HyperLink. ALGUNA COSA. eso me permitirá vincular texto en un diálogo emergente a un href que especifica una función. Aquí está mi código.Cambiar el href de una etiqueta ancla con 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'> 

Ahora tengo que obtener un fso de la base de datos ya que es donde se almacena la información. Este fso es diferente dependiendo de lo que la clase de reflector de entidad envíe a este javascript. Tengo una función que forma cadenas de JavaScript similares a C# que encontré. Luego tengo otra función que obtiene el fso de la clase de reflector de entidad. Esto funciona. Probé la cadena mostrándola en una alerta y esto funciona bien. El problema que tengo es establecer el href de la etiqueta de anclaje con javascript. ¡Me estoy volviendo loco! ¡Por favor ayuda!

Cadena de formato:

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

Mi intento de cambiar el 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 %>); 
} 

Se cambia el enlace de descarga y todo. ¡No puedo ser capaz de configurar esto! ¿Me falta el orden de carga de la página? ¿Debo hacer esto después de que se cargue toda la página, ya que es posible que aún no se hayan generado? Intenté un par de cosas diferentes. Realmente podría usar una dirección.

Respuesta

5

No se puede hacer referencia href directamente así desde un objeto jQuery. Todo lo que estás haciendo es crear una nueva propiedad. Cambiarla para establecer el atributo través attr así ...

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

Para completar, debo mencionar que puede llegar al elemento DOM subyacente mediante el uso de la sintaxis de matrices, y entonces se podría establecer el href con regulares Javascript ...

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

Además, otro error probable, creo que necesitas cotizaciones aquí ...

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

que estoy haciendo esto con una función de JavaScript regular. Eso no tiene esa función .attr? no está trabajando con esa sintaxis – Tom

+0

Lo descubrí. Es .attr ('href', downloadHref); – Tom

0

Esta línea es incorrecta, para configurar el HREF necesita acceder a la función attr de jQuery.

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

Su javascript debe ejecutarse después de que se complete la carga de la página.

La forma de hacerlo jQuery:

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


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

} 
Cuestiones relacionadas