【问题标题】:Fire jQuery event before postback occurs - asp.net在回发发生之前触发 jQuery 事件 - asp.net
【发布时间】:2013-09-05 08:38:13
【问题描述】:

我一直在寻找一种将 jQuery 事件添加到按钮的方法,一旦单击该按钮将触发该事件,然后是 asp 回发。

添加事件很容易,但问题是暂时延迟了 asp 回发。

Asp 代码(在 C# 中添加的事件):

<input runat="server" ClientIDMode="static "id="cancelButton">

JQuery 代码:

var cancelBtn = jQuery('#cancelButton');

cancelBtn.click(function (e) {
    e.preventDefault();

    var cancelBtnEvent = cancelBtn[0].click;

    jQuery(pnl).animate({
        height: 200
    }, 300, 'swing', function () {
        cancelBtnEvent();
    });
}); 

在上面的代码中,我向按钮添加了一个点击事件,'cancelBtn' 是一个输入[type="button"]。该事件将停止默认值,保存点击函数以供稍后调用,做一些动画然后调用点击函数。但是,这会因错误无效对象调用而失败。

所以我的问题:

这应该怎么做?或者我的解决方案可以修复吗?

谢谢

【问题讨论】:

  • “cancelBtn”是锚标记&lt;a&gt;吗?
  • 道歉应该清楚,会更新问题。
  • 请解释投票背后的原因?

标签: jquery asp.net webforms


【解决方案1】:

编辑 1

这是一个适合您的简单技巧。抱歉,我之前没有注意到这个问题,仔细。

var IsFirstLoad = true;// Declare globally (outside ready function)
        cancelBtn.click(function (e) {
            if (IsFirstLoad) {
                e.preventDefault();
            }
            jQuery(pnl).animate({
                height: 200
            }, 300, 'swing', function () {
                jQuery('#cancelButton').click();
                IsFirstLoad=false;
            });
        });

答案首先发布。(在这个场景中不起作用)。对不起!

jQuery(pnl).animate({
        height: 200
    }, 300, 'swing', function () {
        jQuery(cancelBtn).click();
    });

尝试使用jQuery(cancelBtn).click(); 而不是cancelBtnEvent();。如果cancelBtn 是一个jQuery 元素,那么只需cancelBtn.click() 就足够了。

【讨论】:

  • 这也行不通,请查看其他帖子中的 cmets 以进一步了解问题
  • 我会将其标记为正确答案,因为它确实有效。但是最好我想要一个没有全局变量的方法,因为“pnl”会多次出现,但我没有提到这一点。所以这是正确的..感谢您的建议,非常感谢。
  • 我更改了按钮本身的数据属性的全局变量并且工作正常。再次感谢。
【解决方案2】:

首先你确定你的选择器cancelBtn 是正确的吗? ASP.net 修改了 asp 元素的 id,这样你就不能再用$("MyElementId") 来处理它们了。相反,您将不得不使用例如$("[ID$=MyElementId]")。那么cancelBtn是一个什么样的对象呢?

为什么要将点击事件保存在变量中?相反,您可以直接调用它:

jQuery(pnl).animate({
    height: 200
}, 300, 'swing', function () {
    jQuery(cancelBtn).click();
});

请注意,您不需要使用cancelBtn[0] 获取 DOM 元素。

【讨论】:

  • 感谢您的回复,是的,我 100% 确定它是正确的元素。已在 IE 和 Visual Studio 中调试,结果显示正确。 'cancelBtn' 是一个输入[type='button']。为了让 jQuery 在 asp 回发之前触发,我需要延迟原始的 asp 点击事件,我希望通过保存它可以直接在完成委托中调用该函数。如果我只是调用 jQuery,单击“e.preventDefault”将阻止 asp 事件触发。 (如果这是有道理的)
  • 我不确定,但是当您调用点击事件时,按钮的默认行为可能仍然被阻止。 2 条建议:在调用 animate 之后尝试使用超时 setTimeout(function(){jQuery(cancelBtn).click();},300);。或者您可以尝试使用 2 个按钮:一个隐藏(不要设置 visible=false,而是将其包装在一个 div 中并将其样式设置为 display:none;!)用于回发的 asp 按钮和一个用于用户单击的常用 input[type='button'] 按钮.然后你通过几乎与用户按钮相同的 JS 点击隐藏按钮。
  • 双按钮不是一个糟糕的解决方案,但它现在是我的 B 计划。我将尝试使用 _doPostBack()。然后在 c# 代码的页面加载中,我将检查 '_EVENTTARGET' 并调用一个方法。
【解决方案3】:

这也是可能的:

jQuery(cancelBtn).trigger("click");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多