javascript - 如何删除此链接上的 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&XMLDATA=1&RowLimit=0&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&Source=https%3A%2F%2Fepwork%2Eep%2Ecorp%2Fwg%2FProdPayroll%2FSitePages%2FManagerResources%2Easpx&DefaultItemOpen=1&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> </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> </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
解决方案
您似乎无法使用或取消绑定onmousedown
事件。但是,您可以通过将属性设置为 null 来破坏它off
unbind
$('.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>
推荐阅读
- atom-editor - 在 Atom 键盘映射中,^ 是什么意思?
- visual-studio - XAML 设计器未加载 - 通用 Windows 平台 VS2015
- javascript - 反应导航中的 contentComponent 上未定义道具
- excel - 当单元格是公式驱动时,选择大小写不起作用
- postgresql - 如何在postgres中执行没有警告停止的真空命令?
- python - URL 参数中的默认 ModelForm 字段(外键)
- c# - UnauthorizedAccessException 试图访问 AWS Lambda 上的 /tmp
- c++ - 带有 pic18f445k22 的 7 段显示数字时钟
- objective-c - networkextension 不导入较新的版本
- excel - 更改您所走路线的宏,成为指示单元格的宏