【问题标题】:Page refresh with onclick event in dojo and I don't want a page refresh在dojo中使用onclick事件刷新页面,我不想刷新页面
【发布时间】:2026-02-24 03:25:01
【问题描述】:

由于某种原因,在 IE8 中,当我在 onclick 事件后运行此函数时,它会导致页面刷新。我不希望页面刷新发生。

   var edealsButton = dojo.byId("edeals_button");
   var edealEmailInput = dojo.byId("edeals_email");
   var edealsSignup = dojo.byId("edeals_signup");
   var edealsThankYou = dojo.byId("edeals_thankyou");
   var currentValue = dojo.attr(edealEmailInput, 'value');
   if (currentValue != '' && currentValue != 'Enter your email') {
       var anim = dojox.fx.flip({
           node: edealsSignup,
           dir: "right",
           duration: 300
       })
       dojo.connect(anim, "onEnd", this, function() {
           edealsSignup.style.display = "none";
           edealsThankYou.style.display = "block";
       })
       dojo.connect(anim, "onBegin", this, function() {

           var criteria = { "emailAddress": '"' + currentValue + '"' };
           alert("currentValue " + currentValue);
           var d = essentials.CallWebserviceMethod('AlmondForms.asmx/SignupEdeal', criteria);
           d.addCallback(function(response) {
               var obj = dojo.fromJson(response);
               alert(obj.d);
               if (obj != null && obj.d != null) {
                   //alert(obj.d);
                   if (obj.d == false)
                   {
                       var edealSuccess = dojo.byId("edeals_succes_thankyou");
                       var edealError = dojo.byId("edeals_error_thankyou");

                       alert("edealError: " + edealError);
                       dojo.style(edealSuccess, "display", "none");
                       dojo.style(edealError, "display", "inline-block");
                   }
                   else
                   {
                       var edealSuccess = dojo.byId("edeals_succes_thankyou");
                       var edealError = dojo.byId("edeals_error_thankyou");

                       dojo.style(edealSuccess, "display","inline-block");
                       dojo.style(edealError, "display", "none");
                   }
               }
               else {
                   var edealSuccess = dojo.byId("edeals_succes_thankyou");
                   var edealError = dojo.byId("edeals_error_thankyou");

                   dojo.style(edealSuccess, "display", "none");
                   dojo.style(edealError, "display", "inline-block");
               }
           });
       })
       anim.play();
       edealEmailInput.innerHTML == 'Enter your email';
   } 
   else 
   {
       dojo.attr(edealEmailInput, 'value', 'Enter your email');
       dojo.style(edealEmailInput, 'color', '#CC2525');
   }

【问题讨论】:

    标签: dojo internet-explorer-8 dom-events javascript-framework


    【解决方案1】:

    您的“d.addCallback”代码似乎没有正确处理。您可能想尝试在“anim.play();”之前放置“dojo.stopEvent()”行,看看这是否会停止回发。

    来自api.dojotoolkit.org 站点,dojo.stopEvent()“防止传播并破坏传递事件的默认操作”。在docs.dojocampus.org 网站上,他们说“dojo.stopEvent(event) 将阻止这两种默认行为,任何事件的传播(冒泡)。”

    祝你好运,希望这对你有所帮助。

    【讨论】:

    • 我错过了 dojo.stopEvent(evt),因此页面正在运行 dojo,然后像按下表单按钮一样进行刷新。 dojo.stopEvent(evt) 阻止页面在表单提交按钮上进行页面刷新。