2014-09-15 4 views
1

У меня есть этот Javascript код:Javascript Ajax вызова перед отправкой не выполняется

this.confirmBox = function(data) { 
    $.jconfirm((function(_this) { 
    return function() { 
     var objConfig; 
     objConfig = $.jconfirm("getConfig"); 
     alert("here"); 
     return true; 
    }; 
    })(this)); 
    return false; 
}; 

this.beforeSend = function(event, jqXHR) { 
    if (this.confirmBox()) { 
    return this.disableSubmit(); 
    } else { 
    return jqXHR.abort(); 
    } 
}; 

Когда я запускаю сценарий я посадка на alert("here") и return true для функции confirmBox.

Проблема в том, что по какой-то причине сам вызов ajax больше не запускается. Как мне настроить функцию beforeSend, чтобы проверить, является ли результат checkBox истинным или ложным?

+0

принимают значение 'this.disableSubmit()' в 'var' и отладки, чтобы выяснить это стоимость. Верните var позже. –

+0

@theghostofc - спасибо. 'This.disableSubmit()' не вызывает проблемы, что вызов ajax больше не запускается. Я не уверен, но может быть, что я неправильно проверяю функцию beforeSend, если функция confirmBox истинна/ложна? – domi771

+0

Я думаю, что внутри метода beforeSend вы используете 'this', который ссылается на тот же метод (beforeSend) –

ответ

1

Вы должны добавить событие на кнопках Пожалуйста, см this скрипку пример

buttons: { 
     "Yes": function() { 
      $(this).dialog('close'); 
      callback(true); 
     }, 
      "No": function() { 
      $(this).dialog('close'); 
      callback(false); 
     } 
    } 
+0

I я использую [linkthis plugin] (http://codecanyon.net/item/jquery-msgbox/92626) – domi771

+0

Вы можете использовать бесплатный jConfirm, который находится по адресу http://riggerthegeek.github.io/jConfirm/examples.html он делает не стоит больше всего, как плагин evato, который вы используете, и намного проще. – Scription

+0

это хорошо! позвольте мне реализовать это и вернуться к вам, если ваше решение выше не должно работать. – domi771

1

Я думаю, что вызов метода confirmBox в beforeSend всегда возвращает false, потому что $ .msgbox не блокирует выполнение потока, например, метод window.confirm. Вероятно, вам нужно вызвать вызов ajax, когда вы получите результат === «Подтвердить» из окна сообщения.

$.msgbox("confirm", { 
    type: "confirm", 
    buttons: [ 
     { type: "cancel", value: "Cancel" }, 
     { type: "submit", value: "Confirm" } 
    ]}, function(result) { 
     if (result === "Confirm") { 
      // $.ajax(..) 
     } 
    } 
}; 
+0

Да, OP должен передать успех и отключить функции обратного вызова от beforeSend до confirmBox и включить их в обратные вызовы, предоставленные MsgBox. См. Https://github.com/composite/jQuery.MsgBox/wiki – Paul

+0

@Paul - я использую jquery.msgbox.js – domi771

+0

@Mihir - спасибо. Не могли бы вы дать мне пример о том, как достичь этого? – domi771

Смежные вопросы