Как я могу сделать это с OnClientClick - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть элемент управления с таким атрибутом, как этот

OnClientClick="checkfn( resultfn(boolval) )"

Идет проверка и отображается модальное подтверждение.И возвращает результаты в resultfn (boolval) как true или false.

Как заставить OnClientClick принять это значение и вернуть его.Например.если resultfn (boolval) = true, то я хочу, чтобы он отправлял обратно на сервер, если он ложный, я хочу отменить.момент.Увидеть ниже.

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 не ожидает диалогового окна подтверждения, прежде чем что-то вернет.Поэтому моя идея состоит в том, что я хотел бы поместить вещи в функции Continue и Cancel, чтобы возвращать в resultfn (boolval) bool, который может использовать onclientclick.

Ответы [ 5 ]

2 голосов
/ 25 февраля 2011

Невозможно заставить функцию JavaScript, вызываемую в OnClientClick, «возвращать» значение на сервер, но вы можете заполнить скрытый ввод в форме, чтобы в обработчике щелчков на стороне сервера вы могли прочитать значение :

OnClientClick="document.getElementById('hidden').setAttribute('value', checkfn(resultfn(boolval)))"
1 голос
/ 25 февраля 2011

Вместо того чтобы позволить jQuery создавать кнопки для вас, добавить кнопки вручную и использовать кнопку ссылки в качестве кнопки продолжения.

1 голос
/ 25 февраля 2011

@ 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");
        }
    }
});
1 голос
/ 25 февраля 2011

Предполагая, что это находится на кнопке / ссылке отправки, измените ее на

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 %>);'
1 голос
/ 25 февраля 2011

Используйте OnClientClick="return checkfn( resultfn(boolval) );". Если у вас есть проверка, это может нарушить проверку, потому что это return рано. В этом случае вы хотите только return, если результат равен false:

OnClientClick="var result=checkfn(resultfn(boolval)); if (!result) return false;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...