путаница обратного вызова JavaScript - PullRequest
1 голос
/ 28 декабря 2010

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

Я использую DataTables для отображения данных строки в последнем столбце.справа есть 2 изображения, одно для редактирования и одно для удаления.Чтобы перехватить событие клика, которое я использую:

 $('#datatable tbody tr a.delete img').live( 'click', function () {
        });

Друг (которого сейчас нет в городе) дал мне этот код, чтобы попробовать ..

function fancyAlert(msg) {
        jQuery.fancybox({
        'modal' : true,
        'content' : "<div style=\"margin:1px;width:240px;\">"+msg+"<div style=\"text-align:right;margin-top:10px;\"><input style=\"margin:3px;padding:0px;\" type=\"button\" onclick=\"jQuery.fancybox.close();\" value=\"Ok\"></div></div>"
        });
    }

    function fancyConfirm(msg,callback) {
        var ret;
        jQuery.fancybox({
            modal : true,
            content : "<div style=\"margin:1px;width:240px;\">"+msg+"<div style=\"text-align:right;margin-top:10px;\"><input id=\"fancyConfirm_cancel\" style=\"margin:3px;padding:0px;\" type=\"button\" value=\"Cancel\"><input id=\"fancyConfirm_ok\" style=\"margin:3px;padding:0px;\" type=\"button\" value=\"Ok\"></div></div>",
            onComplete : function() {
                jQuery("#fancyConfirm_cancel").click(function() {
                    ret = false;
                    jQuery.fancybox.close();
                })
                jQuery("#fancyConfirm_ok").click(function() {
                    ret = true;
                    jQuery.fancybox.close();
                })
            },
            onClosed : function() {
                callback.call(this,ret);
            }
        });
    }

    function fancyConfirm_text() {
        fancyConfirm("Ceci est un test", function(ret) {
        alert(ret)
        })
    }

Что работаеткогда я использую его следующим образом:

`$('#datatable tbody tr a.delete img').live( 'click', function () {

     if (!fancyConfirm("Are you sure you want to delete this record?"))
            e.preventDefault();

 });`

Я запутался в части обратного вызова, потому что, когда я нажимаю «Отмена», окно исчезает, но страница по-прежнему отображается серым цветом и блокируется.То, что я хочу сделать, - это если пользователь нажимает «Отмена», чтобы завершить и вернуться к обычному режиму, и если пользователь нажимает «ОК», то мне нужно передать var rowID в файл «delete_row.php» ... Но это новая территория дляменя .. Если бы это была простая ссылка html, я мог бы получить .val и сделать, но в DataTables у меня нет этой опции ..

Может ли кто-нибудь здесь указать мне правильное направление?Я погуглил это до смерти, но не могу найти информацию о моих требованиях к использованию.

1 Ответ

1 голос
/ 28 декабря 2010

Функция fancyConfirm ожидает функцию обратного вызова, если не указано, что в событии fancybox onclosed есть ошибка, которая может объяснить, почему она остается серой.

Попробуйте изменить вызов на:

fancyConfirm("Are you sure you want to delete this record?", function(ret) { })
...