Я устанавливаю переменную, равную вводу из подсказки, затем она передается и используется для отображения на моей странице. Однако я не думаю, что подсказка - это то, что мне нужно использовать, но я понятия не имею, как это сделать иначе. По сути, как только он предложит им, у него уже есть электронная почта в поле подсказки, и это то, что я хочу, но я не хочу, чтобы они могли изменить поле, чтобы избежать ввода другого электронного письма, отличного от того, которое установлено в их сеансе. . Любой совет? Мой код ниже.
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
var title = prompt('Confirm Email:','<?php echo "{$_SESSION['email']}"; ?>');
if (title) {
var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
$.ajax({
url: 'add_events.php',
data: 'title='+ title+'&start='+ start +'&end='+ end,
type: "POST",
success: function(json) {
alert('Added Successfully');
}
});
Что вы на самом деле пытаетесь сделать? Если вы не хотите, чтобы они изменили адрес электронной почты, не используйте prompt или confirm или любой другой метод JavaScript, просто покажите адрес электронной почты в HTML-коде страницы.
«Я не хочу, чтобы они могли изменить поле, чтобы избежать ввода электронной почты, отличной от той, которая установлена в их сеансе» ... затем, когда он будет отправлен на сервер, просто используйте адрес электронной почты, сохраненный в сеансе. Даже не пытайтесь помещать это в запрос ajax или что-то в этом роде. Почему вы вообще общаетесь с пользователем по этому поводу? Если вы не хотите, чтобы они подтверждали или изменяли его, не показывайте его... (или просто поместите его в обычный старый div или что-то еще где-нибудь на странице). Его не нужно использовать где-либо в вашем JS-коде.
but I don't want them to be able to change the field to avoid the input of a different email для этого и нужен атрибут readonly.
@ArtisticPhoenix хм, да, но также результат используется для отправки обратно в вызове ajax ... и пользователь все равно может вмешиваться в это, если захочет ... так что на самом деле лучше просто полностью отказаться от него со стороны клиента код и получить значение из сеанса, когда запрос ajax поступает на сервер.
Щелчок пользователя по календарю в нужное время, а затем в основном значение «var title» используется для отображения в моем календаре вместе с выбранным временем.
@Trevor, если вы не хотите, чтобы пользователь мог изменить заголовок, просто не спрашивайте их об этом. Кажется, вы не добавляете событие непосредственно в fullCalendar, а вместо этого отправляете его на сервер. Поэтому, если заголовок всегда должен быть адресом электронной почты, хранящимся в сеансе, то при запуске add_events.php просто выберите адрес электронной почты из сеанса в это время и используйте его в качестве заголовка при сохранении события в своей базе данных. Вам не нужно отправлять поле «название» в запросе ajax или просить пользователя ввести его.
@ADyson Хорошо, это имеет смысл. попробую так и сделать. Большое спасибо за вашу помощь, никогда ничего не делал с Ajax, так что это все новое. Ценить это!
@ Тревор, нет проблем. P.S. эта концепция не будет специфичной для ajax - то же самое будет применяться, если вы выполняете традиционную обратную передачу формы. Это больше связано с источником данных - в этом случае у вас уже есть правильные данные на сервере, поэтому нет необходимости снова запрашивать их у клиента, тем более что существует вероятность их изменения (законно или в противном случае) и привести к отправке неверных данных в вашу базу данных.
@ADyson Всякий раз, когда они нажимают на календарь, это когда им предлагается, и их ввод используется для отображения в календаре. Всякий раз, когда они нажимают на календарь, могу ли я просто подтвердить, чтобы убедиться, что это нужное им время, и если они подтвердят, он просто примет этот запрос и поместит их электронную почту в календарь?
@Trevor Ну, как ты добавляешь события в сам календарь? Вы используете renderEvent на стороне клиента или просто ждете завершения add_events, а затем запускаете refetchEvents? P.S. Я добавил ответ на ваш первоначальный основной вопрос ниже.
Мероприятие рендеринга @ADyson! и большое спасибо.
Без проблем. Если ответ помог вам, не забудьте отметить его как «принятый» (нажмите на галочку рядом с ответом, чтобы он стал зеленым) - спасибо :-)
Если вы используете eventRender напрямую, вы можете просто ввести значение электронной почты из сеанса в JS, например. var event = { title: "<?php echo $_SESSION["email"]; ?>", start: start, end: end }; тогда он фактически жестко закодирован (в этом небольшом примере предполагается, что начало и конец исходят из входных данных обратного вызова «выбрать» - я думаю, вы бы создали этот объект в обратном вызове «успех» вашего ajax, чтобы вы знали, что событие было успешно добавлено перед размещением в календаре).
@ADyson Определенно! Поскольку я новичок в stackoverflow и у меня нет репутации, он скрыт, но, безусловно, мой голос! Спасибо, я обязательно попробую это.
Вы не можете голосовать, пока у вас не будет немного больше репутации, но вы уже должны иметь возможность «принять» ответы, это два разных действия.
Понял тебя! Еще раз спасибо. @ADyson



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, вы используете подсказку в качестве подтверждения? Вы должны использовать window.confirm('message')
var title = '<?php echo "{$_SESSION['email']}"; ?>';
var check = window.prompt('Confirm Email: ' + title);
if (check) {
}
но если это часть сеанса, почему вы просто не читаете его из сеанса на сервере?
Если вы не хотите, чтобы пользователь мог изменить заголовок, просто не просите его об этом. Кажется, вы не добавляете событие непосредственно в fullCalendar, а вместо этого отправляете его на сервер (и, предположительно, после этого вы заставляете fullCalendar повторно получать события с сервера, я бы предположил, хотя это не показано).
Поэтому, если заголовок всегда должен быть адресом электронной почты, хранящимся в сеансе, то при запуске add_events.php просто выберите адрес электронной почты из сеанса в это время и используйте его в качестве заголовка при сохранении события в своей базе данных. Вам не нужно отправлять поле «название» в запросе ajax или просить пользователя ввести его.
Фрагмент клиентского кода, который вы показали, может быть изменен на:
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
if (title) {
var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
$.ajax({
url: 'add_events.php',
data: 'start='+ start +'&end='+ end,
type: "POST",
success: function(json) {
alert('Added Successfully');
}
});
Не видя кода на стороне сервера, я не могу конкретно посоветовать, но, вероятно, вы захотите сделать что-то, посредством чего теперь вы читаете поле «заголовок» из $_SESSION, а не из $_POST при сборе данных для записи в базу данных.
чем почему вы используете значение? Почему вы не используете подтверждение?