单击+;打开一个窗口(aspx页面);javascript

单击+;打开一个窗口(aspx页面);javascript,javascript,click,Javascript,Click,我需要通过单击打开一个新窗口 asp.net按钮的名称。我的问题是它总是需要点击两下。。如果我写打开的窗口 加载页面中的代码,然后单击一次即可打开窗口。。 有没有办法解决这个问题 按钮点击代码: btnClaim.Attributes.Add("Onclick","javascript:return OpenPopup()") Javascript函数: function OpenPopup() { window.open("newWindow.aspx?", "_blank", "heig

我需要通过单击打开一个新窗口 asp.net按钮的名称。我的问题是它总是需要点击两下。。如果我写打开的窗口 加载页面中的代码,然后单击一次即可打开窗口。。 有没有办法解决这个问题

按钮点击代码:

btnClaim.Attributes.Add("Onclick","javascript:return OpenPopup()")
Javascript函数:

 function OpenPopup()
{
window.open("newWindow.aspx?", "_blank", "height=500, width=575, left=150,
top=150, " +
"location=no, menubar=no, resizable=no, " +
"scrollbars=no, titlebar=no, toolbar=no", true);
} 

发生此问题的原因可能是表单在单击时提交(回发)。如果在onclick属性中返回false,则应取消表单提交。您也可以使用


发生此问题的原因可能是表单在单击时提交(回发)。如果在onclick属性中返回false,则应取消表单提交。您也可以使用


问题是您正在添加代码来处理单击事件处理程序中的单击。这意味着,当您第一次单击按钮时,事件处理程序会将属性添加到按钮。回发后,您可以再次单击该按钮以打开弹出窗口,因为该按钮现在具有客户端代码

在Page_Load中添加属性,使按钮始终具有该属性,或者在事件处理程序中向页面添加代码,以便在回发后立即调用函数:

ClientScript.RegisterStartupScript(Me.GetType(), "open", "OpenPopup();", True)

问题是您正在添加代码来处理单击事件处理程序中的单击。这意味着,当您第一次单击按钮时,事件处理程序会将属性添加到按钮。回发后,您可以再次单击该按钮以打开弹出窗口,因为该按钮现在具有客户端代码

在Page_Load中添加属性,使按钮始终具有该属性,或者在事件处理程序中向页面添加代码,以便在回发后立即调用函数:

ClientScript.RegisterStartupScript(Me.GetType(), "open", "OpenPopup();", True)

离题,因为我认为这与您的实际问题无关,但是:
onclick
不是超链接属性,您不需要(或不想要)javascript:前缀。它不应该造成任何伤害(因为它看起来像一个JavaScript标签,所以不是语法错误),但充其量也没用。(如果您使用的是
href
,情况就不一样了。)另外,离题:您想去掉
窗口中逗号后的空格。打开
调用。(例如,
…width=575,left=150…
不是
…width=575,left=150…
原始的
窗口。open
实际上明确禁止了它们(并且倾向于阻止它们),我敢打赌一些UAs不会仍然这样做。(如果你想知道,不,我不知道为什么要点击两下。不应该,如果你使用纯HTML+JavaScript也不会。)离题,因为我认为这与你的实际问题无关,但是:
onclick
不是超链接属性,你不需要(或想要)
javascript:
前缀。它不应该造成任何伤害(因为它看起来像一个javascript标签,所以不是语法错误),但充其量也没用。(如果您使用的是
href
,情况就不一样了。)另外,也离题了:您想去掉
窗口中逗号后的空格。打开
调用。(例如,
…width=575,left=150…
不是
…width=575,left=150…
原始的
窗口。open
实际上明确禁止了它们(并且倾向于阻止它们),我敢打赌一些UAs不会仍然这样做。(如果你想知道,不,我不知道为什么需要点击两次。不应该,如果你使用纯HTML+JavaScript,也不会。)不,这不会导致需要单击两次。它可能会导致在窗口打开后的第二次单击时再次发回。不,这不会导致需要单击两次。它可能会导致在窗口打开后的第二次单击时再次发回。