2010-05-17 36 views
8

Tôi đang chuyển tên công ty đến sự kiện onclick. Một số tên công ty có dấu nháy đơn trong đó. Tôi đã thêm '.Replace ("'", "'") 'vào trường company_name. Điều này cho phép sự kiện onclick kích hoạt, nhưng thông báo xác nhận hiển thị là "Công ty Hàn Jane & # 39;".Thoát khỏi dấu nháy đơn khi truyền tham số trong sự kiện onclick

<a href="#" onclick="return Actionclick('<%= Url.Action("Activate", new {id = item.company_id}) %>', '<%= Html.Encode(item.company1.company_name.Replace("'", "&#39;")) %>');" class="fg-button fg-button-icon-solo ui-state-default ui-corner-all"><span class="ui-icon ui-icon-refresh"></span></a> 

<script type="text/javascript"> 
function Actionclick(url, companyName) 
{ 
    if (confirm('This action will activate this company\'s primary company ('+companyName+') and all of its other subsidiaries. Continue?')) 
    { 
     location.href = url; 
    }; 
}; 

EDIT Thông điệp xác nhận cho thấy & # 39; trong thư chứ không phải là '. Khi tôi gõ nó ra ở đây, nó thay thế & # 39; với một '. Thêm không gian để điều đó sẽ không xảy ra. Tôi muốn biết cách tốt nhất để vượt qua nó để sự kiện onclick của tôi và cũng hiển thị đúng nó trong tin nhắn mà không làm nhiều thay thế (nếu có một cách tốt hơn).

+0

Có lẽ tôi đang ngớ ngẩn nhưng câu hỏi cụ thể ở đây là gì? Bạn không muốn 'trong thư xác nhận hay bạn muốn' '? – griegs

+0

Rất tiếc. Xem chỉnh sửa. – RememberME

Trả lời

12

Có hai tùy chọn như tôi thấy.

  1. Nếu bạn bọc tham số trong dấu ngoặc kép (") thay vì dấu nháy đơn/dấu nháy đơn (') thì bạn không cần phải thoát khỏi nó. đang trong string) và của dấu nháy đơn sẽ không là một vấn đề Mặc dù, như javascript đã được bọc trong dấu ngoặc kép, bạn sẽ cần phải dấu chéo ngược thoát khỏi dấu ngoặc kép của bạn ví dụ:..

    onclick="return Actionclick(\"<%= Url.Action("Activate", new {id = item.company_id}) %>\", \"<%= Html.Encode(item.company1.company_name) %>\");"

  2. Dấu gạch chéo ngược thoát khỏi tên công ty vì nó chỉ là chuỗi javascript cuối cùng cần dấu nháy đơn, không phải HTML, ví dụ:

    onclick="return Actionclick('<%= Url.Action("Activate", new {id = item.company_id}) %>', '<%= Html.Encode(item.company1.company_name.Replace("'", "\\'")) %>');"

+0

Tôi bỏ lỡ việc thoát khỏi dấu gạch chéo ngược chính nó trong # 2. Đã chỉnh sửa. –

+0

Cảm ơn bạn rất nhiều !!! Chỉ cần giúp tôi với vấn đề của tôi !!! – Jenski

2

Bạn đã có một chuỗi hoạt Javascript đen bên trong một giá trị thuộc tính HTML.

Vì vậy, bạn sẽ cần phải đầu tiên JS mã hóa giá trị (thay thế ' với \'\ với \\), sau đó HTML mã hóa. Hiện tại, bạn đang mã hóa HTML là ' (sẽ không hiệu quả vì trình duyệt sẽ giải mã nó trở lại dấu nháy đơn trước khi công cụ JS nhìn thấy nó) ... và sau đó mã hóa HTML lại, nghĩa là &#39;.

Sử dụng bộ mã hóa JSON để chuyển một chuỗi (hoặc bất kỳ loại giá trị nào khác) thành chữ JavaScript.

Tuy nhiên. Viết JavaScript trong một chuỗi hoàn toàn hút. Theo dõi nhiều lớp thoát không phải là thứ mà tâm trí giỏi. Vì vậy, không làm điều đó. Tránh các thuộc tính xử lý sự kiện nội tuyến mọi lúc. Thay vào đó, hãy sử dụng tập lệnh tĩnh và chỉ định trình xử lý từ chính JavaScript, bằng cách sử dụng tập lệnh không phô trương.

<a class="dangerous fg-button fg-button-icon-solo ui-state-default ui-corner-all" 
    href="<%= Server.HTMLEncode(Url.Action("Activate", new {id = item.company_id})) %>" 
    title="This action will activate this company's primary company (<%= Server.HTMLEncode(companyName) %>) and all of its other subsidiaries." 
> 
    <span class="ui-icon ui-icon-refresh"></span> 
</a> 

(Tôi sẽ sử dụng jQuery kể từ khi bạn có nó trong thẻ của bạn :)

<script type="text/javascript"> 
    $('.dangerous').click(function() { 
     return confirm(this.title+' Continue?'); 
    }); 
</script> 

Tuy nhiên lưu ý rằng đây là một sự lạm dụng của <a>. Các hành động thực hiện thay đổi đang hoạt động đối với một thứ sẽ không bao giờ được gửi hoặc được phép nhận dưới dạng yêu cầu GET. Thay vào đó, bạn nên sử dụng nút gửi yêu cầu POST (trực tiếp dưới dạng biểu mẫu hoặc qua AJAX). (Bạn cũng nên cân nhắc sử dụng ASP.NET được xây dựng trong điều khiển thay vì templating các giá trị trong, để tránh phải gọi HTMLEncode khá nhiều.)

Xem một trong những cách mà điều này có thể cắn bạn.

1

Tôi vừa mới gặp 5 năm sau, vì vậy tôi sẽ chia sẻ những gì đã hiệu quả đối với tôi.

Check-out HttpUtility.JavaScriptStringEncode trên MSDN

Bạn có thể sử dụng để mã hóa chuỗi ở phía máy chủ khi thiết lập giá trị của bất động sản. Điều này sẽ tạo ra biểu diễn unicode của dấu nháy đơn - "\ u0027" có thể được chuyển vào JavaScript khi nhấp vào.

Đối với ví dụ ban đầu:

item.company1.company_name = HttpUtility.JavaScriptStringEncode("Jane's Welding Company"); 

sẽ trở thành

"Jane'\u0027s Welding Company" 

Lưu ý về HttpUtility.JavaScriptStringEncode - Bạn có thể chọn để chỉ định một boolean để mã hóa chuỗi với dấu ngoặc kép ngoặc kép (addDoubleQuotes bool). Tuy nhiên, vì chuỗi này sẽ được sử dụng làm tham số cho hàm JavaScript, bạn không muốn thêm dấu ngoặc kép.

Các vấn đề liên quan