我有一个更新面板,其中包含一个gridview,并在每行内部删除该行的图像(删除图标)。我试图在一个常规的JavaScript确认弹出窗口给出答案。
$(function(){
$("img.delete").on("click", function(evt){
return false; //Does not work
/*or*/
evt.preventDefault();//Does not work either
});
});
呈现的HTML:
<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为默认值,因为我没有在标记中设置它。
答案 0 :(得分:1)
ThiefMaster提供的答案对我有用,在:preventDefault() doesn't work,我的案例稍作调整:
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');
}
使用updatepanel + scriptmanager时,pageLoad事件可用,它允许我在每个部分回发上重新附加事件处理程序。
答案 1 :(得分:0)
在这种情况下,请尝试在MarkUp中声明OnClientClick="return Delete()"
并检查该页面是否仍在回发..
function Delete(){
return false;
}
答案 2 :(得分:0)
看起来将onclick="__doPostBack('controlId','Delete$0')"
作为图片属性会导致页面回发,无论您从$("img.delete").click()
事件返回什么内容。
您可以尝试从点击事件中调用__doPostBack
方法吗?这对我有用 - 我能够以这种方式控制回发。
展望未来,您可能必须使用Page.ClientScript.GetPostBackEventReference
并在JavaScript中公开回发,以便您可以从事件处理程序中调用它们。
答案 3 :(得分:0)
上次我工作时,我的方案是回发完全被阻止了。情况是我将回发控件放在div标签中,并将这样的click事件应用于带有.live事件的div标签。这阻止了回发。因此将图像控件放在div元素中并为该div执行相同操作。但我不知道如何允许回发。