我如何使用OnClientClick执行此操作

时间:2011-02-25 05:27:21

标签: javascript jquery onclick

我有一个具有这样的属性的控件

OnClientClick="checkfn( resultfn(boolval) )"

checkfn进入并显示模态确认。并将resultfn(boolval)中的结果返回为true或false。

如何使OnClientClick获取该值并将其返回。例如。如果resultfn(boolval)= true,那么我希望它回发到服务器,如果它是假的,我想取消。

更新:

这就是checkfn目前所做的事情。见下文。

function checkfn() {

                $("#dialog-confirm").dialog({
                resizable: false,
                height: 140,
                modal: true,
                buttons: {
                    Continue: function () {                           
                        $(this).dialog("close");
                        return true;
                    },
                    Cancel: function () {
                        $(this).dialog("close");
                        return false;
                    }
                }
            });

}

这不起作用,因为checkfn在返回之前没有等待对话框确认框。所以我的想法是,我想把继续和取消函数中的东西返回到resultfn(boolval)一个onclientclick可以使用的bool。

5 个答案:

答案 0 :(得分:2)

你不能让OnClientClick中调用的JavaScript函数“返回”服务器的值,但你可以在表单中填充一个隐藏的输入,这样在你的服务器端点击处理程序中,你可以读取价值:

OnClientClick="document.getElementById('hidden').setAttribute('value', checkfn(resultfn(boolval)))"

答案 1 :(得分:1)

使用OnClientClick="return checkfn( resultfn(boolval) );"。如果您有验证,这可能会破坏验证,因为它return到了早期。在这种情况下,如果结果为false,则只需要return

OnClientClick="var result=checkfn(resultfn(boolval)); if (!result) return false;"

答案 2 :(得分:1)

假设这是在提交按钮/链接上,请将其更改为

OnClientClick="return checkfn( resultfn(boolval) );"

以这种方式试试

function checkfn(buttonUniqueID) {
    $("#dialog-confirm").dialog({
    resizable: false,
    height: 140,
    modal: true,
    buttons: {
        Continue: function () {                           
            $(this).dialog("close");
            __doPostBack(buttonUniqueID, '');
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    }
});

然后更改OnClientClick

OnClientClick='return checkfn(<%= this.UniqueID %>);'

答案 3 :(得分:1)

@ amit_g的答案非常接近。由于您使用的是jQueryUI对话框而不是window.confirm,因此checkfn()正在执行并返回。尝试这样的事情:

<asp:Button ID="buttonUniqueId" ... OnClientClick="checkfn(); return false;" />

上面的代码将触发checkfn()然后取消回发。这为您的jQueryUI对话框提供了打开时间并向用户显示选项的时间。接下来,如果用户决定继续使用,请使用@ amit_g的checkfn()使用.NET按钮进行回发:

function checkfn(buttonUniqueID) {
    $("#dialog-confirm").dialog({
    resizable: false,
    height: 140,
    modal: true,
    buttons: {
        Continue: function () {                           
            $(this).dialog("close");
            __doPostBack(buttonUniqueID, '');
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    }
});

答案 4 :(得分:1)

不要让jQuery为你制作按钮,而是手动添加按钮,并使用链接按钮作为继续按钮。