我得到了一个更新面板,其中包含一个网格视图,并在每行图像(删除图标)中删除该行。我正在尝试在常规 JavaScript 确认弹出窗口中给出答案的条件。
$(function(){
$("img.delete").on("click", function(evt){
return false; //Does not work
/*or*/
evt.preventDefault();//Does not work either
});
});
呈现的网页:
<td>
<img id="ctl00_ctl00_ctl00_ctl00_ctl00_ctl00_ContentPlaceHolderDefault_Content_Content_Content_Content_DashboardGrid_ctl02_DeleteControl140" class="delete" onclick="__doPostBack('ctl00$ctl00$ctl00$ctl00$ctl00$ctl00$ContentPlaceHolderDefault$Content$Content$Content$Content$DashboardGrid','Delete$0')" width="20" height="20" title="Remove item from your list." src="/images/delete_item.png" alt="Remove item from your list." style="border-width:0px;">
</td>
它不起作用,因为回发始终由更新面板执行,该面板的 UpdateMode 为默认值,因为我没有在标记中设置它。
ThiefMaster 提供的答案对我有用,在: preventDefault() 不适用于我的情况:
function pageLoad()
{
var inlineFunction = new Function($('img.delete').attr('onclick'));
$('img.delete').click(function(event){
if(!confirm('Are you sure?')) {
event.stopImmediatePropagation();
}
}).click(inlineFunction).removeAttr('onclick');
}
pageLoad 事件在使用 updatepanel+scriptmanager 时可用,它允许我在每次部分回发时重新附加事件处理程序。
在这种情况下,请尝试在标记中声明OnClientClick="return Delete()"
并检查页面是否仍在回发。
function Delete(){
return false;
}
onclick="__doPostBack('controlId','Delete$0')"
作为图像属性会导致页面回发,无论您从事件返回什么$("img.delete").click()
。
您可以尝试从单击事件调用 __doPostBack
方法吗?这对我有用 - 我能够以这种方式控制回发。
今后,您可能必须使用 Page.ClientScript.GetPostBackEventReference
并在 JavaScript 中公开回发,以便可以从事件处理程序调用它们。
上次我工作时,我的场景是回发被完全阻止。情况是我将回发控件放在div 标记中,并将此类单击事件应用于具有 .live 事件的div 标记。这阻止了回发。因此,将图像控件放在div 元素中,并对该div 执行相同的操作。但是我不确定如何允许回发。