阻止在更新面板中回发,具体取决于 JS 确认框



我得到了一个更新面板,其中包含一个网格视图,并在每行图像(删除图标)中删除该行。我正在尝试在常规 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 执行相同的操作。但是我不确定如何允许回发。

最新更新