簡體   English   中英

如何有條件地從錨標記中打開新窗口/標簽?

[英]How to conditionally open a new window/tab from an anchor tag?

我有以下代碼,這些代碼將打開新的標簽頁/窗口,並根據用戶單擊網格中的按鈕顯示文件的內容。

$(myButton).attr('href', '/MyController/GetDoc?Field1=' + dataItem.data1 + '&Field2=' + dataItem.data2);    
$(myButton).attr('target', '_blank');

在控制器中,我返回

return new FileContentResult(Convert.FromBase64String(myDoc), "application/pdf");

如果我有文件,一切正常。

如果控制器方法出錯或找不到文檔,如何防止事件發生?

更新:

$(function () {

    $(".myButtonClass").each(function () {
        var button = $(this);
        var docUrl = '';

        button.attr('target', '_blank');
        checkDocumentUrl(button, docUrl);
    });

});

在我的按鈕單擊方法中:

var myButton = $(e.currentTarget).closest(".myButtonClass");
$(myButton).attr('href', '/MyContoller/GetDoc?Field1=' + dataItem.data1+ '&Field2=' + dataItem.data2);   

單擊按鈕之前 ,請從服務器請求文檔。 如果失敗,則該文檔不存在,您可以通過JavaScript禁用該按鈕。

您的控制器應檢查文檔是否存在,如果不存在,則返回HTTP 404

 //Example data only. Each button presumably has its own data. var dataItem = { data1: 'foo', data2: 'bar' }; $(document).ready(function() { //Check the url for each button $('.myButton').each(function() { var button = $(this); var docUrl = '/MyController/GetDoc?Field1=' + dataItem.data1 + '&Field2=' + dataItem.data2; button.attr('href', docUrl); button.attr('target', '_blank'); checkDocumentUrl(button, docUrl); }); function checkDocumentUrl(button, docUrl) { //Make a request for the document $.ajax({ method: 'HEAD', url: docUrl, error: function() { //If request fails, document does not exist handleInvalidDocument(button, docUrl); } }); } function handleInvalidDocument(button, docUrl) { button.on('click', function(e) { //Prevent the link from opening a new tab e.preventDefault(); alert('Sorry, no document available at ' + docUrl); }); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <a class="myButton">My Button</a> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM