Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2013, 12:51
Новичок на форуме
Отправить личное сообщение для BlackSSA Посмотреть профиль Найти все сообщения от BlackSSA
 
Регистрация: 17.12.2013
Сообщений: 5

Событие срабатывает со второго раза
Доброго времени суток!
Не получилось найти решение проблемы со схожими на форуме, поэтому прошу помощи. Суть проблемы: есть два диалога error и attention. Когда их вызываю, то в первый раз появляются на секунду и пропадают, а в последующие разы срабатывают ожидаемым образом. Есть нюанс - эти диалоговые окна открываются поверх другого диалогового окна, плюс имеется диалоговое окно для AJAX "ход загрузки". Вот фрагмент кода:
$(document).ready(function () {
    $("#ErrorMsg").dialog({
        autoOpen: false,
        buttons: { "Закрыть": function () { $(this).dialog("close"); } },
        title: "Ошибка",
        modal:true
    });
    
    $("#AttentionMsg").dialog({
        autoOpen: false,
        buttons: { "Закрыть": function () { $(this).dialog("close"); } },
        title: "Внимание",
        modal: true
    });
});

//Динамически открываю основной диалог
function editV(obj) {
    var id = $(obj).attr("value");
    $.ajax({
        url: "/Zakaz/GetV/" + id,
        success: function (data) {
//html основного диалога с сервера(их несколько вариантов)
            $("#div_V").html(data);
//кнопка сохранения. Собственно она и отвечает за обработку события, с которым воюю
            $("#btn_save_v").button({
                icons: { primary: 'ui-icon-disk', secondary: null }
            }).on('click', function () {
                saveV();
            });
            $("#btn_cancel_v").button({
                icons: { primary: 'ui-icon-circle-close', secondary: null }
            });
            $("#btn_del_v").button({
                icons: { primary: 'ui-icon-trash', secondary: null }
            });
            $("#btn_cancel_v").on("click",function () {
                $("#div_V").dialog("close");
            });
            $("#btn_master_v").button({
                icons: { primary: 'ui-icon-lightbulb', secondary: null }
            });            
            $("#div_V").dialog({
                modal: true,
                title: "Редактирование объема",
                width: 750
            });
            $("#div_V input,#div_V .klient_input,#div_V .klient_input_min,#div_V .klient_input_money").on("change",function () {
                var state = $("#StateV").val();
                switch (state) {
                    case "Загруженный":
                        $("#StateV").val("Измененный");
                        break;
                    default:
                        break;
                }
            });            
        }
    });
}

function saveV() {
//Критерий, по которому определяем дальнейшие действия: сохранить, ошибка, ничего не менялось(чтоб не гонять данные лишний раз
    var state = document.getElementById("StateV").value;
    if (state == "Загруженный") {
        console.log("Нет никаких изменений");
//текст в диалоге
        $("#AttentionText").html("Никаких изменений не обнаружено! Если хотите выйти, то просто нажмите соответствующую кнопку.");
        $("#AttentionMsg").dialog("open");
        return false;
    }
    var serialisation = $("#form_V").serialize() + "&idZak=" + document.getElementById("IdZak").value;
    $.ajax({
        type: "POST",
        url: "/Zakaz/SaveV",
        data: serialisation,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (XMLHttpRequest.status == "403") {
                console.log("Нет прав на редактирование");
                errorAJAX("Нет прав для редактирования заказа");
            }
        },
        success: function (datas) {
            //Успешная передача, работаем дальше
...
        }
    });

function errorAJAX(msg) {
    $("#errorText").html(msg);
    $("#ErrorMsg").dialog("open");
    return false;
}


ASP MVC
JQuery версии 2.0.3
JQuery UI - 1.10.3

Кстати, не получилось побороть кодировку в XMLHttpRequest: в хедере передавал кодировку "Content-type: text/plain; charset=windows-1251" - все равно кракозябры рисует, но это, как понимаю, уже тема другого вопроса.
Заранее признателен!

Последний раз редактировалось BlackSSA, 17.12.2013 в 12:55. Причина: дописал
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2013, 22:38
Новичок на форуме
Отправить личное сообщение для BlackSSA Посмотреть профиль Найти все сообщения от BlackSSA
 
Регистрация: 17.12.2013
Сообщений: 5

Уточнение по вопросу
Эмпирическим путем выяснил, что проблема в следующем: тело первого диалога подгружается по AJAX, т.е. все button - динамические. Так вот если на эти кнопки повесить обработчики типа "$("#id").button().on("click",function(){...}) ", то первое нажатие приводит к закрытию диалогового окна . Попробовал через live() в $.(document).ready, так браузер выпадает в ошибку, типа не поддерживается данный метод. Кто подскажет, в чем проблема???
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2013, 22:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от BlackSSA
live
удалена из jquery начиная с 1.9
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2013, 22:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

BlackSSA,
вешайте on на элемент выше
Сообщение от BlackSSA
$("#id").
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2013, 22:50
Новичок на форуме
Отправить личное сообщение для BlackSSA Посмотреть профиль Найти все сообщения от BlackSSA
 
Регистрация: 17.12.2013
Сообщений: 5

Сообщение от рони Посмотреть сообщение
BlackSSA,
вешайте on на элемент выше
Простите, но куда выше? По AJAX мне приходит что-то вроде
<form>
бла-бла-бла

<button id="id1">Кнопка</button>
<button id="id2">Кнопка2</button>
<button id="id3">Кнопка3</button>
</form>

Я этот фрагмент вставляю по $("#div_id").html("ajax-ответ"), и в success пытаюсь навесить обработчики.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2013, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от BlackSSA
$("#div_id").html("ajax-ответ"),
так на $("#div_id"). и ставьте on
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2013, 22:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

BlackSSA,
$("#div_id").on("click","#id",function
Ответить с цитированием
  #8 (permalink)  
Старый 19.12.2013, 00:15
Новичок на форуме
Отправить личное сообщение для BlackSSA Посмотреть профиль Найти все сообщения от BlackSSA
 
Регистрация: 17.12.2013
Сообщений: 5

Сообщение от рони Посмотреть сообщение
BlackSSA,
$("#div_id").on("click","#id",function
Не помогло. Повесил в $(document).ready() - в первый раз диалог закрывается, срабатывает только со второго раза.
Ответить с цитированием
  #9 (permalink)  
Старый 19.12.2013, 00:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

BlackSSA,
в первом посте на какой строке заканчивается функция saveV() ?
Ответить с цитированием
  #10 (permalink)  
Старый 19.12.2013, 00:42
Новичок на форуме
Отправить личное сообщение для BlackSSA Посмотреть профиль Найти все сообщения от BlackSSA
 
Регистрация: 17.12.2013
Сообщений: 5

На 87-ой. Но код уже все-равно переделал, пока выяснял ошибку. И наконец дошел до нужного результата . Проблему решил, когда добавил во все AJAX "async: false" + $("#id_div").on("click","#id_button",function(){.. .}); В режиме дебага обнаружил, что меня склоняет по функции ajax, хотя на этот момент контекст должен был быть получен(на одной форме, вернее - диалоге, 3 ajax-запроса).

Большое спасибо за помощь!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие на теге input срабатывает несколько раз hrundel Events/DOM/Window 3 15.12.2013 14:49
onclick срабатывает со 2 раза в ie djonA Общие вопросы Javascript 19 25.03.2013 01:07
почему событие срабатывает более одного раза garisson Элементы интерфейса 3 08.11.2012 05:22
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 13:39
click срабатывает со второго раза jsuse jQuery 2 03.12.2011 03:44