20.03.2013, 17:04
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
от внешних дивов можно абстрагироваться, они просто определяют положение текущего дня в неделе.
У меня отображается целая неделя, грубо говоря если сегодня среда, то понедельник и вторник будут обернуты в div class = "past", среда в div class="today", выходные в div class="holliday", остальные usual.
вот так выглядит блок с заказом:
<div class="order_box">
<span class="time">7 : 00 - </span>
<span class="destination">Вологда(5001)</span>
<div class="seat1 place">Иванов Иван</div>
<div class="seat2 place free">свободно</div>
<div class="seat3 place free">свободно</div>
<div class="seat4 place free">свободно</div>
<div class="approved"> Статус:подтверждено</div>
</div>
Если мы кликаем на seat2 к примеру, то там должна появиться такая конструкция
<div class="seat2 place free">
<form action="url" method="POST">
<input type="text" name="name">
<input type="submit" value="ok">
</form>
</div>
Человек вводит туда свое ФИО, к примеру Сидоров Андрей, нажимает ок. Отрабатывается форма, данные улетают в базу, страница перезагружается и теперь мы видим такой блок:
<div class="order_box">
<span class="time">7 : 00 - </span>
<span class="destination">Вологда(5001)</span>
<div class="seat1 place">Иванов Иван</div>
<div class="seat2 place">Сидоров Андрей</div>
<div class="seat3 place free">свободно</div>
<div class="seat4 place free">свободно</div>
<div class="approved"> Статус:подтверждено</div>
</div>
Последний раз редактировалось makc9I, 20.03.2013 в 17:08.
|
|
20.03.2013, 17:54
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
makc9I,
так?
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function () {
$(".free").mouseenter(function () {
$(this).text("бронь").css({
"background": "#FAD400",
"color": "#0000CD",
"cursor": "pointer"
})
}).mouseleave(function () {
$(this).text("свободно").css({
"background": "",
"color": "",
})
}).click(function () {
var myform = $("<form/>", {
"action": "url",
"method": "POST"
})
$("<input/>", {
"type": "text",
"name": "name"
})
.appendTo(myform);
$("<input/>", {
"type": "submit",
"value": "ok"
})
.appendTo(myform);
$(".free").off();
$(this).html(myform)
});
})
</script>
</head>
<body>
<div class="order_box"> <span class="time">7 : 00 - </span>
<span class="destination">Вологда(5001)</span>
<div class="seat1 place">Иванов Иван</div>
<div class="seat2 place free">свободно</div>
<div class="seat3 place free">свободно</div>
<div class="seat4 place free">свободно</div>
<div class="approved">Статус:подтверждено</div>
</div>
</body>
</html>
|
|
21.03.2013, 12:05
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
да, это именно то, что надо.
Только интересно, почему фокус с этого инпута уже никуда не пропадает, т.е. как только мы кликнули в поле, мы уже не может просто кликнуть в соседнее поле, ничего не произойдет. Думаю это логично, но нужна кнопка отмена, которая будет возвращать прежний вид полю("свободно" или "бронь" при наведении). Еще надо дать имя инпуту такое же как и имя класса дива, внутрь которого мы кликнули, т.е. seat1-seat4. Также я немного модифицировал данные о блоке, теперь внешний див имеет такой вид:
<div class="order_box" id="<уникальный id>">
Вот необходимо добавить скрытый инпут,value параметр которого будет содержать id родительского diva класса order_box.
Пока это все написал и буду пробовать реализовать, может и у самого получится
|
|
21.03.2013, 12:30
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
makc9I,
$(".free").off(); это отключило все прежние установки.
... кнопка отмена ))... вот так проект разрастается )))
пробуйте сами что неполучится страшивайте.
|
|
27.03.2013, 13:26
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
стал изучать курс по Jquery от codeSchool. Хоть и курс малюсенький, но я после работы прихожу уставший и это дело тянется уже неделю. Само задание почти не движется. Пытаюсь делать методом тыка и тех малых знаний, что уже получил с курса.
Кнопку отмена добавил, но не так, как надо.
добавил так:
$(document).ready(function () {
$(".today .free, .usual .free, .holliday .free").mouseenter(function () {
$(this).text("бронь")
.css({
"background": "#FAD400",
"color": "#0000CD",
"cursor": "pointer"
})
}).mouseleave(function () {
$(this).text("свободно")
.css({
"background": "",
"color": ""
})
}).click(function () {
var myform = $("<form/>", {
"action": "<?PHP $_SERVER['PHP_SELF']; ?>",
"method": "POST"
})
$("<button> отмена</button>")
.appendTo(myform);
Все бы хорошо, но кнопка обрабатывается методом, указанным в форме при клике, так как лежит внутри ее(формы). Можно конечно вместо кнопки сделать какой-нибудь span или div, но хочется именно кнопку без лишних заморочек со стилями, тем более что новые браузеры позволяют вставить кнопку где угодно. Не обязательно внутри формы.
Пытался сделать так:
...
.click(function () {
$(this).append("<button> отмена</button>");
}
не получается так, грубо говоря мне надо просто добавить button ниже формы внутри этого же дива класса free. Я еще не научился грамотно ходить по DOMу видимо, и делаю какие-то нелепости.
Последний раз редактировалось makc9I, 27.03.2013 в 13:30.
|
|
27.03.2013, 17:36
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
Проблему решил, все достаточно просто, завтра выложу, как получилось.
|
|
28.03.2013, 10:09
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
вот такой получился код:
$(".today .free, .usual .free, .holliday .free").mouseenter(function () {
$(this).text("бронь")
.css({
"background": "#FAD400",
"color": "#0000CD",
"cursor": "pointer"
})
}).mouseleave(function () {
$(this).text("свободно")
.css({
"background": "",
"color": ""
})
}).click(function () {
var myform = $("<form/>", {
"action": "<?PHP $_SERVER['PHP_SELF']; ?>",
"method": "POST"
})
$("<input/>", {
"type": "text",
"name": "name",
"class": "name_input"
})
.appendTo(myform);
$("<input/>", {
"type": "submit",
"value": "ok",
"id": "name_submit"
})
.appendTo(myform);
$(".free").off();
$(this).html(myform);
$(this).append("<button> отмена</button>")
$(this).css ({
"cursor":"default"
})
})
})
Теперь осталось как-то удалить всю форму по нажатию кнопки отмена.
|
|
28.03.2013, 11:13
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
добавление к листингу такого:
$("button").click (function(){
$("#add_name_form").remove();
})
не работает что-то
|
|
01.04.2013, 12:47
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
Практически все получилось.
Полная картина выглядит так:
Имеется такой блок:
<div class="order_box" id="56">
<span class="time">10 : 00 - </span>
<span class="destination">п. Молочное(5007)</span>
<div class="seat1 place">Иванов</div>
<div class="seat2 place">Петров</div>
<div class="seat3 place free">свободно</div>
<div class="seat4 place free">свободно</div>
<a class="approve_btn" href="/index.php?&id=56"> подтвердить </a>
<div class="not_approved"> Статус:ожидает подтверждения</div>
</div>
Визуально выглядит так:
При наведении на любую ячейку с надписью свободно видим следующее:
Клик по ячейке приводит к такому:
Вот код, который занимается обработкой сего чуда:
$(document).ready(function () {
$(".today .free, .usual .free, .holliday .free")
.mouseenter(function () {
$(this).text("бронь")
.css({
"background": "#FAD400",
"color": "#0000CD",
"cursor": "pointer"
})
}).mouseleave(function () {
$(this).text("свободно")
.css({
"background": "",
"color": ""
})
}).click(function () {
var myform = $("<form/>", {
"action": "http://auto/index.php",
"method": "POST",
"id": "add_name_form"
})
$("<input/>", {
"type": "text",
"name": "name",
"class": "name_input"
})
.appendTo(myform);
$("<input/>", {
"type": "submit",
"value": "ok",
"id": "name_submit"
})
.appendTo(myform);
var cell_class = $(this).attr("class").slice(0,5);
var order_id = $(this).parent().attr("id");
$("<input/>", {
"type":"hidden",
"name": "place",
"value": cell_class
})
.appendTo(myform);
$("<input/>", {
"type":"hidden",
"name": "order_id",
"value": order_id
})
.appendTo(myform);
$(".free").off();
$(this).html(myform);
$(this).append("<button> отмена</button>");
$(this).css ({
"cursor":"default"
})
$("button").click (function(){
$("#add_name_form").remove();
$(this).remove();
})
})
})
Во всем этом есть одна брешь:
$(".free").off();
Как только мы вызываем метод off, мы лишаемся всех настроек для нашей ячейки, но это необходимо, чтобы можно было кликнуть в input text для ввода фамилии, и выводы мыши за пределы ячейки не приводили к отмене обработки.
Но, вдруг мы случайно кликнули в ячейку и хотим отменить это действие, для этого я и добавил кнопку "отмена".
Вот ее обработка:
$("button").click (function(){
$("#add_name_form").remove();
$(this).remove();
})
Все, что я могу сделать, это удалить созданную ранее форму. Но хочется, чтобы вся обработка положения мышки также вернулась, думал, что для этого достаточно прикрутить назад такое:
$(".today .free, .usual .free, .holliday .free")
.mouseenter(function () {
$(this).text("бронь")
.css({
"background": "#FAD400",
"color": "#0000CD",
"cursor": "pointer"
})
}).mouseleave(function () {
$(this).text("свободно")
.css({
"background": "",
"color": ""
})
})
Но как оказалось, прикручивать назад надо вообще весь код, но ведь в этом коде присутствует сама обработка нажатия на кнопку "отмена" и происходит рекурсия. Да и в целом не очень разумно дважды вызывать один и тот же код.
Возникли мысли, что надо как-то обойтись без
$(".free").off();
Но при этом как-то блокировать обработку мыши на момент клика по ячейке (бронь), чтобы выход за пределы ячейки не приходили к сбросу отображения формы, и сам клик в input text обрабатывался именно как клик туда(чтобы вводить текст), а не как клик по ячейке (бронь).
Вот возникла проблема, решения пока не нашел.
Последний раз редактировалось makc9I, 01.04.2013 в 13:21.
|
|
01.04.2013, 14:22
|
Интересующийся
|
|
Регистрация: 04.10.2012
Сообщений: 25
|
|
рони посоветовал использовать метод bind, теперь я реализовал все обработчики через него, вышло примерно так:
вместо
.mouseenter(function () {}
получилось
.bind("mouseenter",( function () {} )
При обработке клика в ячейку я делаю следующее
$(".free").unbind();
Как я понимаю, при нажатии на кнопку отмена нам необходима снова вызвать bind, но помимо обработчиков нужны ведь еще и сами действия, т.е. я принципиально не понимаю разницы между off и unbind.
|
|
|
|