2011-11-24 29 views
1

我有一个页面动态添加图像按钮,我希望他们发送确认,当你点击它们(删除)。Javascript确认没有代码后面的代码

由于它们是动态的,我不能在.click事件中编写任何代码。

找到最好的方法吗?检查是否为true,然后将其作为参数发送给代码后面的代码中的删除函数?或者其他方式?

感谢

回答

1

如果您希望能够取消提交,请将OnClientClick属性设置为字符串“Return”和函数名称。客户端脚本可以通过返回false来取消提交。

查看图片按钮clientclick属性。

void Button1_Click(Object sender, EventArgs e) 
     Label1.Text = "Server click handler called."; 
    End Sub 

动态生成的ImageButton应该有点像这样: 创建所有imagebuttons commman事件哈德勒和设置这些的ImageButton的id的主键值。

检查Respond to Button Web Server Control Events in Client Script的详细信息:

您可以创建自定义的ImageButton用户控件,将提供有关click事件删除功能。在ItemRowCreated或GridView上,RowCreated事件为这些动态添加的控件分配事件驱动程序。

如果它们不在任何数据绑定控件中,那么在运行时简单地分配那些属性。

protected void Page_Init(object sender, EventArgs e) 
    { 
     ImageButton btn = new ImageButton(); 
     btn.ID = "1"; 
     btn.ImageUrl = "http://icons.iconarchive.com/icons/deleket/button/256/Button-Fast-Forward-icon.png"; 
     btn.OnClientClick = "return confirm('Ready to submit.')"; 
     btn.Click += new ImageClickEventHandler(btn_Click); 
     this.form1.Controls.Add(btn); 
    } 

检查事件处理程序中的控件ID。

private void btn_Click(object sender, ImageClickEventArgs e) 
     { 
      ImageButton btn = (ImageButton)sender; 
      Response.Write("<script>alert('Image button with id = " + btn.ID + "clicked');</script>"); 
     } 

然后perfom删除操作

+0

唯一的问题是我无法将事件处理程序设置为btn.click,它不是按钮上的选项。 – Jimmy

+0

让我知道如何/你在哪里你的网页上添加这些imagebuttons ..然后我可以建议在哪里做.. –

+0

到目前为止,香港专业教育学院只加了一个,和它以同样的方式你做......在后面的代码。 ..对于迟到的回答抱歉,我的互联网出去了! – Jimmy

0

这很容易做到与jQuery(一个JavaScript框架),即使想用纯JavaScript做的,你需要一个类添加到您的所有删除图像按钮,添加一个处理函数,

使用jQuery,只要使用此:

$(".deleteImageButton").bind("click", function() { 
    var res = confirm("Are you sure you want to delete?"); 
    return res; 
}); 
+0

任何JavaScript框架是确定使用,但我不想AJAX。林不熟悉jQuery,所以我怎么会得到从确认到代码后面的回应? – Jimmy

+0

你很不清楚。 *您的意思是*来自确认*的回应? –

+0

从confirmbox – Jimmy

0

事件冒泡的DOM,即。他们将触发它发生的元素以及它所有的父项(直到文档节点本身)。这可以很容易地解决您的问题:只需将按钮处理程序附加到按钮的容器中即可。 jQuery的使它更容易通过它的委托功能做到这一点,这里的一些示例代码:

$('#buttons').delegate('.delete_control', 'click', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); // maybe you don't need these 2, you can remove them if so 

    if (confirm('Are you sure you want to delete that element?')) { 
     // make an ajax request to delete the image. alternatively you can submit 
     // a hidden form, with the controlid in an input, but this is way simpler. 
     $.post('/url/to/delete/control/by/id/' + e.target.id, function() { 
      $(e.target).remove(); // to delete the button when the request is done. 
     }); 
    } 
}); 

而这里的展示了整个事情的工作一的jsfiddle页:http://jsfiddle.net/8d7D4/

+0

哪有的HREF您的网址然后我打电话给jquery后面的代码? – Jimmy

+0

这与你问的问题完全无关。我已经用一个例子更新了我的代码。 – deviousdodo

0

对象火.click等功能“收集“,如果在此之后添加任何元素,则需要使用.delegate.bind来使新元素也触发事件。

+0

'live'已被弃用,它是一个糟糕的API。不要以此为例。而且,由于您复制了我的代码并仅更改了该代码,因此您可以在我的答案上添加评论,而不是发布其他答案。 – deviousdodo