首页 > 解决方案 > 如何删除此链接上的 javascript 事件处理程序并将其转换为常规链接?

问题描述

我有一个 Sharepoint 2010 页面,其中包含打开基于 Web 的 Excel 版本的链接。我想从链接中删除 onclick 和 onmousedown 事件,并将其转换为仅下载 excel 文件的常规链接。我尝试使用此 jquery 代码从表的第一行中的第 3 项中删除事件处理程序(请参见下面的代码),但它不起作用。是否可以操纵这些 javascript 事件来创建常规链接?

$(window).load(function() { 
    $(".ms-vb-title a").attr("onmousedown",alert("Test"));  
});
<table summary="ManagerResourcesFiles " o:webquerysourcehref="/wg/ProdPayroll/_vti_bin/owssvr.dll?CS=65001&amp;XMLDATA=1&amp;RowLimit=0&amp;View={25D77A0C-2CB2-4B32-8CEC-9899E9A64193}" width="100%" border="0" cellspacing="0" dir="none" onmouseover="EnsureSelectionHandler(event,this,48)" cellpadding="1" id="onetidDoclibViewTbl0" class="ms-listviewtable" xmlns:o="urn:schemas-microsoft-com:office:office" handledeleteinit="true">
<tbody>
<tr class="ms-itmhover" iid="48,3,0" setedgeborder="true">
<td class="ms-vb-itmcbx ms-vb-firstCell"><input type="checkbox" class="s4-itm-cbx" title="Paymaster Roster"></td>
<td class="ms-vb2"><div><img src="/wg/ProdPayroll/icon/excel.png"></div></td>

<td height="100%" onmouseover="OnChildItem(this)" class="ms-vb-title"><div class="ms-vb itx" onmouseover="OnItem(this)" ctxname="ctx48" id="3" field="LinkFilename" perm="0x7fffffffffffffff" eventtype=""><a onfocus="OnLink(this)" href=" /wg/ProdPayroll/_layouts/xlviewer.aspx?id=/wg/ProdPayroll/ManagerResourcesFiles/Paymaster%20Roster.xlsx&amp;Source=https%3A%2F%2Fepwork%2Eep%2Ecorp%2Fwg%2FProdPayroll%2FSitePages%2FManagerResources%2Easpx&amp;DefaultItemOpen=1&amp;DefaultItemOpen=1" onmousedown="return VerifyHref(this,event,'0','SharePoint.OpenDocuments','/wg/ProdPayroll/_layouts/xlviewer.aspx?id=/wg/ProdPayroll/ManagerResourcesFiles/ Employee %20Roster.xlsx')" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','SharePoint.OpenDocuments.3','0','SharePoint.OpenDocuments','','1https://epwork.ep.corp/wg/ProdPayroll/_layouts/xlviewer.aspx?id=/wg/ProdPayroll/ManagerResourcesFiles/Paymaster%20Roster.xlsx','','750','0','0','0x7fffffffffffffff','','')">Employee Roster</a></div><div class="s4-ctx" onmouseover="OnChildItem(this.parentNode); return false;" style="top: 149px; left: 831px; height: 43px; line-height: 43px; margin: 0px;"><span>&nbsp;</span><a onfocus="OnChildItem(this.parentNode.parentNode); return false;" onclick="PopMenuFromChevron(event); return false;" href="javascript:;" title="Open Menu"><img src="/_layouts/images/ecbarw.png" alt="Open Menu" style="visibility: hidden;"></a><span>&nbsp;</span></div></td>

<td class="ms-vb2"><nobr>4/11/2019 4:20 PM</nobr></td>
<td class="ms-vb-user ms-vb-lastCell"><span class="ms-imnSpan"><img name="imnmark" class="ms-imnImg" title="" border="0" height="12" width="12" src="/_layouts/images/blank.gif" alt="No presence information" sip="prebek@ep.com" id="imn_313,type=smtp"><a onclick="GoToLink(this);return false;" href="/wg/ProdPayroll/_layouts/userdisp.aspx?ID=750">John Smith</a></span></td></tr>
</tbody

标签: javascriptjqueryhtmlcss

解决方案


您似乎无法使用或取消绑定onmousedown事件。但是,您可以通过将属性设置为 null 来破坏它offunbind

$('.ms-vb-title a').attr('mousedown', null); // <-- Remember to put quotes around your selector

如果这不起作用并且事件仍然附加到它,我会验证您的选择器是否正确。我记得当我在 SharePoint 工作时,DOM 是一团糟(除其他外,到处都是重复的 id),我总是在努力找出正确的选择器。

如果您正在寻找有关下载部分的建议,您可以轻松地将链接转换为下载对象(或创建一个隐藏的对象)。

let csvData = `data:text/csv;charset=utf-8, ${myCsvData}`;
let encodedUri = encodeURI(csvData);
let link = document.createElement('a');
link.href = encodedUri;
link.download = 'mycsv.csv';
document.body.appendChild(link);
link.click(); // <-- will trigger the actual download process

function test() {
  alert('tst');
}

$(document).ready(() => {
  const button = $('button');
  // button.off('onmousedown'); // <-- wont work
  // button.unbind('onmousedown'); // <-- wont work
  // button.off('mousedown'); // <-- wont work
  // button.unbind('mousedown'); // <-- wont work
  // button.attr('onmousedown', null); // <-- uncomment to kill onmousedown event
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onmousedown="test()">
Test
</button>


推荐阅读