根据JS确认框阻止更新面板中的回发

时间:2012-10-08 22:39:36

标签: javascript jquery asp.net

我有一个更新面板,其中包含一个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为默认值,因为我没有在标记中设置它。

4 个答案:

答案 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执行相同操作。但我不知道如何允许回发。