Перейти к содержимому

Вопросы по диску «Javascript. Больше, чем просто сайт!»


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 69

#61 NaGuWaL

NaGuWaL

    Ученик

  • Киберсанты
  • PipPip
  • 12 сообщений
0
Обычный
  • Страна, Город:
    Краснодар
  • Пол:Мужчина

Отправлено 14 Июль 2011 - 07:18

Допустим у нас есть <div></div> - в него мы загружаем элементы формы из $.ajax метода библиотеки JQUERY, этот метод привязан к событию click на другом элементе. То есть мы получаем доступ к загруженным в div элементам формы только после того как отработает $.ajax.
Эта ситуация приемлема и работает только в случае если мы получаем один раз доступ к загружаемым элементам формы. Но если нам нужно данную операцию производить n кол-во раз то при следующей загрузке (2ой) доступ к элементам формы исчезает, хотя структура DOM остаётся прежней. Как решить эту ситуацию?
И вообще как решать подобные ситуации, я воюю с этим уже неделю(ну естественно в свободное от работы время), и никак не могу найти на него хотя бы
приблизительно верный ответ.
В качестве примера на сайте www.sc-sh.ru при заказе товара(при нажатии на маленькую корзинку под картинкой товара) открывается блок корзины в который загружается таблица с наименованием товара, и в свою очередь для манипуляции заказанным товаром в ней присутствуют 2а элемента формы (text и button). При заказе товара работает только элемент text (первый раз, после обновления контента уже ничего не работает), а когда мы скрываем затем заново открываем элемент корзины щелчком по ней мыши активируется доступ к удалению строки. Отсюда и выше изложенный вопрос.

Заранее благодарю за помощь!

Как говорится ищите и найдёте. В недрах моей головы родилась идея которую я и реализовал:

var bool = false;

$('#selektor').mousemove(function(){

if(bool)bool = false;

$($(this).find('input:text')).keyup(function()
{
	if (bool)
	{		
		return true;
	}
	else bool = true;


alert ($(this).val());


});


if(bool)bool = false;

$($(this).find('input:button')).click(function()
{
	if (bool)
	{		
		return true;
	}
	else bool = true;


alert ($(this).attr("name"));



});

});

Собственно из этого примера видно Что если мы обернём требуемые события в событие основного блока и применим метод .find() то результат будет более чем ожидаемым + булевые заглушки и решение задачи обеспечено))))
Сам спрашиваю сам отвечаю)))
  • 0
Только тот свет реален от которого душа пробуждаясь ломает все преграды, темницы и тюрьмы.

На правах рекламы

#62 Денис Хомич

Денис Хомич

    Специалист по JavaScript

  • Автор Info-DVD.Ru
  • PipPip
  • 27 сообщений
4
Обычный
  • Пол:Мужчина

Отправлено 16 Июль 2011 - 09:56

1) Наличие элементов (хоть каких-нибудь) в целевом блоке.

Все зависит от того, с каким результатом завершится обращение к серверу и, соответственно, какой обработчик выполнится.


2) Возможность манипуляции изменяющимися элементами блока.

В вашем случае заведите себе объект shopCart, в свойстве content которого будет лежать текущее содержимое блока, о котором идет речь.
Далее можно либо каждый раз обновлять значение свойства, перед его использованием (но это не круто), либо создать механизм, который будет это (обновлять значение shopCart.content) делать как только в блок были добавлены новые данные (это уже то, что нужно).


  • 0

#63 Денис Хомич

Денис Хомич

    Специалист по JavaScript

  • Автор Info-DVD.Ru
  • PipPip
  • 27 сообщений
4
Обычный
  • Пол:Мужчина

Отправлено 16 Июль 2011 - 10:00

Как говорится ищите и найдёте. В недрах моей головы родилась идея которую я и реализовал:

var bool = false;
.......
Собственно из этого примера видно Что если мы обернём требуемые события в событие основного блока и применим метод .find()


Не нужно таких извращений.
Прочитайте мой предыдущий ответ, будут вопросы по реализации — задавайте.
  • 0

#64 NaGuWaL

NaGuWaL

    Ученик

  • Киберсанты
  • PipPip
  • 12 сообщений
0
Обычный
  • Страна, Город:
    Краснодар
  • Пол:Мужчина

Отправлено 18 Июль 2011 - 11:59

1) Наличие элементов (хоть каких-нибудь) в целевом блоке.

Все зависит от того, с каким результатом завершится обращение к серверу и, соответственно, какой обработчик выполнится.


2) Возможность манипуляции изменяющимися элементами блока.

В вашем случае заведите себе объект shopCart, в свойстве content которого будет лежать текущее содержимое блока, о котором идет речь.
Далее можно либо каждый раз обновлять значение свойства, перед его использованием (но это не круто), либо создать механизм, который будет это (обновлять значение shopCart.content) делать как только в блок были добавлены новые данные (это уже то, что нужно).



1. Результат сервер возвращает в виде таблицы

<table width="100%" cellspacing="2" border="0">
<tbody>
<tr>
<td>Описание</td>
<td>Шт.</td>
<td>Сумма</td>
<td>По цене</td>
<td>Удалить</td>
</tr>
<tr bgcolor="#cccccc">
<td>штамп "Вместе навс...</td>
<td>
<input type="text" maxlength="3" size="1" value="1" name="275">
</td>
<td>68</td>
<td>68</td>
<td>
<input type="button" value="Удалить" name="275">
</td>
</tr>
<tr bgcolor="#cccccc">
<td>штамп "Важно, не за...</td>
<td>
<input type="text" maxlength="3" size="1" value="1" name="270">
</td>
<td>100</td>
<td>100</td>
<td>
<input type="button" value="Удалить" name="270">
</td>
</tr>
</tbody>
</table>
На общую сумму: 168 р.

В блок <div id="tabl"></div>
В которой присутствуют элементы формы. Для манипуляции с записями.
А теперь вопрос по реализации.
КАК)))?
  • 0
Только тот свет реален от которого душа пробуждаясь ломает все преграды, темницы и тюрьмы.

#65 Денис Хомич

Денис Хомич

    Специалист по JavaScript

  • Автор Info-DVD.Ru
  • PipPip
  • 27 сообщений
4
Обычный
  • Пол:Мужчина

Отправлено 18 Июль 2011 - 16:52

КАК)))?


1) делаете глобальный объект-корзину (его свойства доступны отовсюду)
2) при удачном завершении запроса обновляете содержимое
3) при возникновении ошибки - уведомляете пользователя, обновление содержимого не происходит
  • 0

#66 NaGuWaL

NaGuWaL

    Ученик

  • Киберсанты
  • PipPip
  • 12 сообщений
0
Обычный
  • Страна, Город:
    Краснодар
  • Пол:Мужчина

Отправлено 18 Июль 2011 - 19:52

1) делаете глобальный объект-корзину (его свойства доступны отовсюду)
2) при удачном завершении запроса обновляете содержимое
3) при возникновении ошибки - уведомляете пользователя, обновление содержимого не происходит

тоесть

function GlobalObj(getContent)
{
     	this.content = typeof getContent == 'undefined' ? 'none':getContent; //Передаём содержимое блока <div id="basket"></div> свойству content


}
// Создаём метод

GlobalObj.prototype.method_rec = function(newContent){

if(newContent!='undefined')
{
this.content = 'none';
return false;

}
else
{
this.content = newContent;

     ... // Тут я так понимаю надо както это содержимое обработать

return true;
}
}
// Затем объявляем объект
var buyers = new GlobalObj(); // Вопрос, как после объявления 


и потом уже вызываем метод где угодно

buyers.method_rec($('#tab').html(res));

я верно понял концепцию?

и ещё как обработать свойство content?

Сообщение отредактировал NaGuWaL: 18 Июль 2011 - 20:02

  • 0
Только тот свет реален от которого душа пробуждаясь ломает все преграды, темницы и тюрьмы.

#67 Денис Хомич

Денис Хомич

    Специалист по JavaScript

  • Автор Info-DVD.Ru
  • PipPip
  • 27 сообщений
4
Обычный
  • Пол:Мужчина

Отправлено 19 Июль 2011 - 18:43

function GlobalObj(getContent)
{
...
}

жутковато, но направление верное.

и ещё как обработать свойство content?

что Вы имеете в виду?
обработать его можно так, как того требует поставленная задача.

Если речь идет о том, как к нему обращаться, то тут нужно вспомнить об областях видимости:
переменные, объявленные без ключевого слова var становятся глобальными, т.е. видны из любой точни кода.

Для ясности(чтобы визуально не путалось с локальными переменными) можно явно объявить объект корзины, как свойство объекта window.

window.shopCart = new ShopCart(settings);

  • 0

#68 NaGuWaL

NaGuWaL

    Ученик

  • Киберсанты
  • PipPip
  • 12 сообщений
0
Обычный
  • Страна, Город:
    Краснодар
  • Пол:Мужчина

Отправлено 19 Июль 2011 - 18:54

в свойстве this.content = записывается вся получаемая таблица от сервера. Так вот мы её получили а дальше? Нужно же это содержимое обработать... Отловить элементы формы, и привязать к ним обработчики работающие с запросами к серверу... Было бы круто узнать как это можно сделать при таком раскладе. Просто я даже теоретически не могу представить как это можно воплотить в КОД)


  • 0
Только тот свет реален от которого душа пробуждаясь ломает все преграды, темницы и тюрьмы.

#69 Денис Хомич

Денис Хомич

    Специалист по JavaScript

  • Автор Info-DVD.Ru
  • PipPip
  • 27 сообщений
4
Обычный
  • Пол:Мужчина

Отправлено 20 Июль 2011 - 17:10

элементы формы, и привязать к ним обработчики работающие с запросами к серверу

Тут все гораздо проще.
Можно привязать обработчики еще до появления в корзине чего-нибудь.
Для этого использовать метод .live() объекта jQuery.

Пример: привязать ко всем кнопкам с классом «super-button» обработчик, который будет алертить «Ого!»
Реализация тут.
(чтобы глянуть код, подредактировать есть кнопка «Edit with JSBin» в правом верхнем углу)
  • 0

#70 NaGuWaL

NaGuWaL

    Ученик

  • Киберсанты
  • PipPip
  • 12 сообщений
0
Обычный
  • Страна, Город:
    Краснодар
  • Пол:Мужчина

Отправлено 22 Июль 2011 - 11:42

Отходя от темы, на сайте http://www.intuit.ru/ появилась достаточно ёмкая лекция по JS в ней раскрываются довольно интересные детали что не раскрыты в курсе "JS Больше чем сайт", думаю будет приятно с ней ознакомится - Основы JS и взять на вооружение для создания следующих курсов по обучению этому языку, и способов мышления в реализации проектов и идей.


  • 0
Только тот свет реален от которого душа пробуждаясь ломает все преграды, темницы и тюрьмы.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей