【问题标题】:Button Not Working Without Refreshing Page没有刷新页面按钮不起作用
【发布时间】:2023-03-20 03:10:01
【问题描述】:

我正在构建一个具有一些简单功能的网站,但遇到了一些问题。我无法提供任何示例代码,因为我不知道问题出在哪里,而且从技术上讲,该网站并没有崩溃。

网站的前端是 html 和 javascript,后端我使用的是 ASP.Net 和 C#。

页面上有一个按钮,它将触发javascript中的功能。然后该函数将调用后端 aspx 文件(例如 myFunction.aspx)并生成一个输出文件供用户下载。

一切正常。我得到了预期的结果,并且能够毫无问题地下载输出文件。

直到我尝试重新运行此函数时才注意到此问题。

我再次按下按钮,但它没有做任何事情(我也在使用 Httpfox,所以我知道它没有调用任何东西)

我意识到如果不刷新页面,我就无法再次运行该功能。刷新页面后就可以正常使用了。

谁能解释一下为什么会这样?我该如何调试这个问题?我什至不知道是字体问题还是后端问题。

感谢您的帮助。

编辑

这就是我创建按钮的方式。

<button dojoType="dijit.form.Button" type="button" onclick ="myJSFunction('uploadForm')">Generate</button>

这就是函数调用asp后端的方式

var myJSFunction= function (formId) {
    dojo.io.iframe.send
    ({
        url: 'myURL/myFunction.aspx?parameter=p',
        form: dojo.byId(formId),
        method: "POST",
        handleAs: "text",
        load: function (response, ioArgs) {
            dojo.byId("timeStamp").value = response;
        }
        error: function (response, ioArgs) {
            alert("Failure:" + response);
        }
    });
}

编辑 2

我只是注意到一些有趣的事情。

我一直在使用 HttpFox 在 Firefox 中运行,但没有收到任何错误消息。然后我尝试使用 F12 在 Chrome 中运行它,但我收到了红色警报。

在 Chrome 中,在“网络”选项卡下,状态显示为“已取消”,但我仍然得到输出。

怎么会这样?如何找到问题所在?

【问题讨论】:

  • 您能否将代码粘贴到您添加按钮单击处理程序的位置。要调试问题,只需在任何浏览器(通常是 F12)上打开 devtools。如果您只有一次事件,通常是因为您使用 once 声明了一个处理程序,或者它在使用后被分离。
  • @bitoiu 我用的是firebug,没有任何错误,事实上,什么都没有运行。
  • 是 myJSFunction('uploadForm') 调用 dojo.io.iframe.send 吗?真的不熟悉dojo,myJSFunction在哪里?
  • @bitoiu 是的,请查看我更新的代码。 myJSFuntion 位于 html 文件内的
  • 所以,没有错,但是我不知道dojo类型的按钮可以,所以你能不能再有一个简单的HTML按钮,附上一个简单的测试函数和console.log("Test") ,检查是否触发了两次。

标签: c# javascript asp.net response


【解决方案1】:

检查您的 javascript 控制台以查看页面上没有任何错误。否则,请为按钮和 javascript 函数发布您的 asp.net 标记。

编辑: 尝试从您的 javascript 函数中返回 false 。这将阻止执行默认浏览器行为 (What's the effect of adding 'return false' to a click event listener?)

【讨论】:

  • 我按照您的建议添加了 return false ,但它没有进行任何更改。如果不刷新页面,我仍然无法再次运行该功能。
【解决方案2】:

解决方法可能是取消绑定然后重新绑定元素上的点击事件,这样每次点击实际上都是“第一次”,以避免dojo 或其他事情可能超出您的控制范围。我不知道道场,但基于http://dojotoolkit.org/reference-guide/1.9/dojo/on.html#dojo-on,以下应该是正确的:

var updateHandle;
var myJSFunction= function (formId) {
    updateHandle.remove();
    dojo.io.iframe.send
    ({
        url: 'myURL/myFunction.aspx?parameter=p',
        form: dojo.byId(formId),
        method: "POST",
        handleAs: "text",
        load: function (response, ioArgs) {
            dojo.byId("timeStamp").value = response;
            updateHandle = on(your.buttonElement, "click", function(){
            myJSFunction(formId);
            });
        }
        error: function (response, ioArgs) {
            alert("Failure:" + response);
        }
    });
}
updateHandle = on(your.buttonElement, "click", function(){
            myJSFunction("myFormId");
});

【讨论】:

    【解决方案3】:

    感谢大家的帮助和建议。

    我已经找到了问题的解决方案。我需要的只是前端代码的一行代码。

    dojo.io.iframe._currentDfd = null; //add this line
    dojo.io.iframe.send
    ({...
    });
    

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多