2010-10-22 9 views
6

Xin chào, tôi có câu hỏi về javascript. Tôi cần phải gán một giá trị href cho một thẻ neo hoặc asp: HyperLink. SOMETHING. điều đó sẽ cho phép tôi liên kết văn bản trong cửa sổ bật lên của hộp thoại với một href mà một hàm chỉ định. Đây là mã của tôi.Thay đổi href của thẻ neo bằng 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'> 

Bây giờ tôi phải có một fso từ cơ sở dữ liệu vì đó là nơi lưu trữ thông tin. Fso này là khác nhau tùy thuộc vào những gì thực thể phản xạ lớp gửi đến javascript này. Tôi có một chức năng định dạng chuỗi javascript tương tự như C# tôi tìm thấy. Sau đó tôi có một chức năng khác nhận được fso từ lớp phản xạ thực thể. Những công việc này. Tôi đã thử nghiệm chuỗi bằng cách hiển thị nó trong một cảnh báo và điều này hoạt động tốt. Vấn đề tôi đang gặp là thiết lập href của thẻ neo với javascript. Tôi sẽ đi! Hãy giúp tôi!

Chuỗi Format:

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

tôi nỗ lực để thay đổi 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 %>); 
} 

Liên kết tải xuống được thay đổi và tất cả mọi thứ. Tôi dường như không thể thiết lập được điều này! Tôi có thiếu thứ tự tải trang không? Tôi có cần phải thực hiện việc này sau khi toàn bộ trang tải vì các mục có thể chưa được tạo chưa? Tôi đã thử một vài thứ khác nhau. Tôi thực sự có thể sử dụng một hướng.

Trả lời

5

Bạn không thể tham chiếu href trực tiếp như thế từ đối tượng jQuery. Tất cả những gì bạn đang làm là tạo ra một tài sản mới. Thay đổi nó để thiết lập các thuộc tính thông qua attr như thế này ...

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

Để hoàn chỉnh, tôi nên đề cập rằng bạn thể đến được với các phần tử DOM cơ bản bằng cách sử dụng cú pháp mảng, và sau đó bạn có thể thiết lập các href với thường xuyên Javascript ...

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

Ngoài ra, một lỗi có thể xảy ra, tôi nghĩ rằng bạn cần dấu ngoặc kép ở đây ...

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

tôi đang làm điều này với một hàm javascript thông thường. Điều đó không có chức năng .attr? không làm việc với cú pháp đó. – Tom

+0

Tôi đã tìm ra. Nó là .attr ('href', downloadHref); – Tom

0

Dòng này không chính xác, để đặt HREF, bạn cần truy cập chức năng attr của jQuery.

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

javascript của bạn cần chạy sau khi tải trang hoàn tất.

Các jQuery cách để làm việc đó:

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


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

}