Прежде всего,
У вас может быть много параметров для функции mail () ... У вас может быть 5 макс. mail(to,subject,message,headers,parameters);
Что касается переменной $from
, которая должна автоматически поступать с вашего веб-хостинга, если вы используете linux cPanel. Он автоматически исходит из вашего имени пользователя и ip-адреса cPanel.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
Также убедитесь, что у вас есть правильный порядок переменных в вашей функции mail (). mail($to,$subject,$message,etc.)
в этом порядке, иначе есть шанс, что он не сработает. Дайте мне знать, если это поможет ...
Это возможно, но только если пользователь нажимает гиперссылку на странице. Если пользователь использует браузер для перехода от страницы, он получит диалоговое окно браузера по умолчанию, в котором нет возможности сохранить.
Dirty Forms автоматически присоединяет (и удаляет обработчик) beforeunload
, поэтому ваша попытка создать другой обработчик событий, безусловно, потерпит неудачу. Вы никогда не должны делать этого при использовании Dirty Forms.
Вы не указали, какую модальную структуру диалога вы хотели использовать, поэтому я просто покажу пример с использованием диалогового окна JQuery UI. Интеграция других диалоговых фреймворков аналогична. Для этого вы можете проверить исходный код существующих предварительно построенных диалогов .
Кроме того, ваш случай использования немного кратковременен. Что делать, если пользователь хочет уйти и игнорировать изменения? Я добавил пример, который включает в себя дополнительную возможность сделать именно это.
<html>
<head>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.ui/1.11.3/jquery-ui.min.css" />
</head>
<body>
<script type="text/javascript" src="//cdn.jsdelivr.net/g/jquery@1.11.3,jquery.ui@1.11.3,jquery.dirtyforms@2.0.0"></script>
<script type="text/javascript">
$(document).ready(function() {
// This is required by jQuery UI dialog
$('body').append('<div id="dirty-dialog" style="display:none;" />');
// This must be called before the first call to .dirtyForms
$(document).bind('bind.dirtyforms', function (ev, events) {
var originalOnRefireClick = events.onRefireClick;
events.onRefireClick = function (ev) {
if (saveForm) {
// TODO: Replace this with your AJAX function
// to save the form.
alert('saving form...');
}
originalOnRefireClick(ev);
};
});
// Flag indicating whether or not to save the form on close.
var saveForm = false;
$('.mainForm').dirtyForms({
dialog: {
// Custom properties to allow overriding later using
// the syntax $.DirtyForms.dialog.title = 'custom title';
title: 'Are you sure you want to do that?',
proceedAndSaveButtonText: 'Save Changes & Continue',
proceedAndCancelButtonText: 'Cancel Changes & Continue',
stayButtonText: 'Stay Here',
preMessageText: '<span class="ui-icon ui-icon-alert" style="float:left; margin:2px 7px 25px 0;"></span>',
postMessageText: '',
width: 650,
// Dirty Forms Methods
open: function (choice, message) {
$('#dirty-dialog').dialog({
open: function () {
// Set the focus on close button. This takes care of the
// default action by the Enter key, ensuring a stay choice
// is made by default.
$(this).parents('.ui-dialog')
.find('.ui-dialog-buttonpane button:eq(2)')
.focus();
},
// Whenever the dialog closes, we commit the choice
close: choice.commit,
title: this.title,
width: this.width,
modal: true,
buttons: [
{
text: this.proceedAndSaveButtonText,
click: function () {
// Indicate the choice is the proceed action
choice.proceed = true;
// Pass a custom flag to indicate to save the data first
// in the onRefireClick event
saveForm = true;
$(this).dialog('close');
}
},
{
text: this.proceedAndCancelButtonText,
click: function () {
// Indicate the choice is the proceed action
choice.proceed = true;
// Pass a custom flag to indicate not to save the data
// in the onRefireClick event
saveForm = false;
$(this).dialog('close');
}
},
{
text: this.stayButtonText,
click: function () {
// We don't need to take any action here because
// this will fire the close event handler and
// commit the choice (stay) for us automatically.
$(this).dialog('close');
}
}
]
});
// Inject the content of the dialog using jQuery .html() method.
$('#dirty-dialog').html(this.preMessageText + message + this.postMessageText);
},
close: function () {
// This is called by Dirty Forms when the
// Escape key is pressed, so we will close
// the dialog manually. This overrides the default
// Escape key behavior of jQuery UI, which would
// ordinarily not fire the close: event handler
// declared above.
$('#dirty-dialog').dialog('close');
}
}
});
});
</script>
Change one of the fields below, then click "Go to Google" to try to navigate away.
<form class="mainForm" action="jqueryui.html">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
<a href="http://www.google.com/">Go to Google</a>
</body>
</html>
В примере используется привязка пользовательских событий для присоединения к обработчику событий onRefireClick
, который если choice.proceed = true
, но не когда false
.
Мне кажется, вам просто нужно вызвать preventDefault для события.
$(window).bind('beforeunload', function(e){
// check if any field is dirty
if ($('div.form').dirtyForms('isDirty')) {
var modalParams = {
Content: 'You have some unsaved changes, proceed?'
OnSave: navigateAndSave,
OnCancel: e.preventDefault();
}
ShowModal(modalParams);
}
})
function navigateAndSave() {
// Do stuff
};
Это невозможно.
Вы можете показать текстовое сообщение вместе с опцией для продолжения на странице или уйти.
Пожалуйста, просмотрите эту ссылку для получения дополнительной информации : https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
window.onbeforeunload = funcRef
funcRef
является ссылкой на функцию или выражение функции.- Функция должна назначить строковое значение для свойства
returnValue
объектаEvent
и вернуть ту же строку.Пример:
blockquote>window.onbeforeunload = function(e) { return 'Dialog text here.'; };
Вы можете после того, как пользователь решит остаться на странице, показать ваш модальный, но я думаю, что это предложение будет побеждено в то время.
Как заявили другие, вы можете перехватить навигацию, прослушивая клики и ключевые события в ссылках и формах на вашей странице, но это не позволит вам показывать какой-либо диалог, когда пользователь пытается ввести URL-адрес вручную, закрыть вкладку, закрыть окно, нажать на перезагрузку , кнопки назад или вперед и т. д.
Событие
beforeunload
создано таким образом, чтобы защитить пользователей от вредоносных скриптов.Если разрешено такое управление, кто-то может заблокировать ваш браузер в
Изменить.:
Мне удалось показать диалоговое окно подтверждения, которое работает почти так же, как вы хотите, присоединение к 2 событиям
beforeunload
иunload
. Он работает в Internet Explorer 11, Firefox 40 и Safari 5.1 для Windows (что я могу подтвердить прямо сейчас):
var alreadyTriggered = false; function onQuit() { if (alreadyTriggered) return true; alreadyTriggered = true; if (confirm('Sure?')) { alert('OK'); } else { alert('Cancel'); } } window.onbeforeunload = onQuit; window.onunload = onQuit;
You can <a href="javascript: location.reload();">reload the page</a> to test it here.
Это зависит от перерыва в цикле событий JS, который вызывает диалог подтверждения, и нет возможности сделать эту работу с настраиваемыми диалогами, потому что страница изменится или закроется, прежде чем пользователи получат возможность взаимодействовать с ней.
До сих пор нет возможности избежать изменения страницы или закрытия страницы, а также не использовать эту функцию в Chrome. Это также не будет работать в Firefox, событие не было запущено взаимодействием с пользователем.
beforeunload
. Dirty Forms может показывать графический интерфейс GUI в том случае, если пользователь пытается перемещаться, нажав гиперссылку на странице.
– NightOwl888
21 February 2016 в 16:10
beforeunload
. Я не буду просить вас удалить нисходящее зрение, но я попрошу вас обратить немного больше внимания на то, что написано перед тем, как выложить.
– rcdmk
23 February 2016 в 02:05