Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Несколько $(document).ready(function(){ или как? (https://javascript.ru/forum/jquery/2910-neskolko-%24-document-ready-function-%7B-ili-kak.html)

Electric200 25.02.2009 15:02

Несколько $(document).ready(function(){ или как?
 
Добрый день!
Прошу помощи у форумчан так уже несколько дней не могу разобраться. :blink:

Есть форма select , которая отправляет на обработчик значение value. Обработчик делает запрос в БД и возвращает назад на страницу результат в виде следующей формы selecta. Проще говоря, єто форма выбора Страна/Область/Город.
Выбор Страна/Область я сделал через
$(document).ready(function(){

  var options = {

  	target: "#city_form",
    beforeSubmit: showRequest,
    success: showResponse,
    timeout: 3000
  };


  $('#сountry_form').submit(function() {
    $(this).ajaxSubmit(options);



    return false;
  });

});


function showRequest(formData, jqForm, options) {

    var queryString = $.param(formData);

     var formElement = jqForm[03];
    alert('Вот что мы передаем: \n\n' + queryString);

    return true;
}


function showResponse(responseText, statusText)  {


    alert('Статус ответа сервера: ' + statusText + '\n\nТекст ответа сервера: \n' + responseText +
        '\n\nЦелевой элемент div обновиться этим текстом.');
}
</script>


Вот у меня обновляется див элемент #city_form второй формой.
Теперь мне нужно при выборе с второй формы снова отправить данные на файл обработчик..
Но как это сделать, незнаю.. Пытался использовать тот же скрипт с указание уже другой формы, но так не срабатывает..

Прошу вашей помощи, и заранее благодарен!!

x-yuri 26.02.2009 22:55

а что такое ajaxSubmit? #city_form - элемент form? У тебя обновление второго списка происходит по кнопке submit?

Electric200 26.02.2009 23:24

Да
 
Спасибо что откликнулся.. :)

Да, обновление второго списка проходит по sabmity.
#city_form - это div элемент который обновляется.
Он обновляется нормально.. Но как послать снова запрос с обновленной формы - не знаю.. :agree:

x-yuri 27.02.2009 01:01

1. а что такое ajaxSubmit?
2. а не лучше ли второй список по onchange (select) обновлять?
3. как у тебя срабатывает '$(this).ajaxSubmit(options);'. Для этого в div'е #city_form должно возникнуть событие submit

Electric200 27.02.2009 10:16

1. По пермому не знаю, взял пример скрипт с мануала api
2. Да лучше, но как сделать не хватает мозгов, подскажи плиз?
3. Тут я сделал опечатку, поправил в коде (выделил красным).

target: "#city_form" - это див который обновляется
$('#country_form').submit(function() {
$(this).ajaxSubmit(options); - тут $('#country_form') Это форма в которой проходит submit.

Вот это код формы

echo "<form id='country_form'   name='sel_count'   method='post' action='form_area_next.php'>
        <select name='it_mid_count' input type='hidden'>  ";
                                                                                // Так как запрос возвращает несколько строк, применяем цикл
  while($name = mysql_fetch_array($name_count))
  {
    echo "

         <option value =".$name['itemid_country'].">".$name['name_country']."</option>

         ";
  }
   echo " </select>
    <input id='submit1' type='submit' name='submitButton' value='OK' />
    </form>

x-yuri 27.02.2009 15:11

1. так поищи хотя бы где в коде у тебя такая функция определяется
2. перехватывай событие change select'а
$('#selectId').change(function() {...})

Electric200 27.02.2009 15:37

Дык весь код я же привел.. :( Где она там еще может определятся :cray:

2. перехватывай событие change select'а

$('#selectId').change(function() {...})

а что это даст?

x-yuri 27.02.2009 15:43

Цитата:

Дык весь код я же привел.. Где она там еще может определятся
ты как минимум jquery подключаешь - поищи в файлах своего проекта, где есть функция ajaxSubmit? Но, вообще, если ты знаешь как ей пользоваться - забей

Цитата:

а что это даст?
событие change select'а возникает, после изменения пользователем текущего пункта. Т.е. можно будет перезагружать следующий select не по нажатию книпки submit

Electric200 27.02.2009 15:50

Ну ОК. Сделаю я допустим отправку по change вместо submit, результат тот же.. А как быть с другой формой? Тоесть первую по сабмиту а вторую по change ?

ПС а как тут карму добавлять то? а то что то добавил, а не показывает..

x-yuri 27.02.2009 16:14

Цитата:

2. а не лучше ли второй список по onchange (select) обновлять?
Цитата:

2. Да лучше, но как сделать не хватает мозгов, подскажи плиз?
Цитата:

2. перехватывай событие change select'а
$('#selectId').change(function() {...})
Цитата:

а что это даст?
подумай об этом диалоге

Цитата:

Ну ОК. Сделаю я допустим отправку по change вместо submit, результат тот же.. А как быть с другой формой? Тоесть первую по сабмиту а вторую по change ?
оба списка (Область, Город) обновляешь по событию onchange предыдущего списка. "Область" - по onchange списка "Страна", "Город" - по onchange списка "Область". Т.е. у тебя будет 2 обработчика onchange. Каждый из них отправляет запрос на сервер для получения данных для следующего списка. Для отправки запроса на сервер можешь использовать http://docs.jquery.com/Ajax/load#urldatacallback или свой ajaxSubmit (если знаешь как им пользоваться)

Electric200 27.02.2009 17:42

Так.. Сделал я отправку по onchange. Возвращает кусок html c второй формой селектов.

Если пытаюсь с второй формой провернуть теже действия как и с первой но при этом просто копирую и вставляю тот же скрипт но меняю
$('#area_form').change(function() {
$(this).ajaxSubmit(options);
тоесть привязать действие к второй форме - то так не работает а просто перекидывает файл обработчик.
Т.е. у тебя будет 2 обработчика onchange. - вот в том то и дело что так не выходит.

Получается что при двух скриптах второй не фурычит..?

x-yuri 27.02.2009 18:10

событий change возникает у select'а, у тэга форм оно не возникает никогда (разве что если ты сам его инициируешь).
$('#area_form').change(function() {

назначает обработчик события change для элемента с id area_form. Т.к. это форма (похоже), то обработчик никогда не сработает
p.s. тут вообще формы не нужны
p.p.s. покажи текст всей страницчки здесь - http://javascript.ru/paste

Electric200 27.02.2009 18:41

Цитата:

Сообщение от x-yuri (Сообщение 13324)
то обработчик никогда не сработает

Так для первой сработал же, а для второй формы нет..

http://javascript.ru/paste/49a808e3

x-yuri 27.02.2009 19:09

зачем ты назначаешь обработчики формам а не select'ам? Зачем ты вообще используешь формы? Ты же сам согласился, что лучше обновлять списки не по кнопке submit?

Цитата:

Так для первой сработал же, а для второй формы нет..
и сейчас работает (http://javascript.ru/paste/49a808e3)? не верю

p.s. чтобы проверить, срабатывает какой-либо обработчик или нет, можно в него alert('работает') или что-то типа того. А еще лучше пользоваться Firefox + Firebug - в скрипте можно будет писать console.log('работает') и эта фраза будет писаться в панель Console. Плюс еще много всякого удобного там есть

x-yuri 27.02.2009 19:13

ajaxSubmit у тебя, кстати, из файла jquery.form.js, который ты подключаешь, а скачал, наверное, где-нибудь здесь - http://malsup.com/jquery/form/

Electric200 27.02.2009 21:58

Использую формы - хм, а как без форм то? Даже не представляю..
Списки не сабмиту, да тут я согласен.. Так проще для пользователя.. А для скрипта, мне кажется разницы нету по какому действию использовать HttpRequest.
Скрипт работает, честно... :)

alert('работает') или что-то типа того
- так есть же
alert('Вот что мы передаем: \n\n' + queryString);

и
alert('Статус ответа сервера: ' + statusText + '\n\nТекст ответа сервера: \n' + responseText +
        '\n\nЦелевой элемент div обновиться этим текстом.');


А еще лучше пользоваться Firefox + Firebug
- есть такой, но пользоваться пока не научился толком..

ПС Так мне делать то с вторым списком?

x-yuri 27.02.2009 22:36

а ты можешь дать еще ссылку на работающий вариант (не на код)?

есть такой, но пользоваться пока не научился толком
а ты попробуй - вместо того, чтобы писать alert('asd'); пишешь console.log('asd'); и 'asd' появляется на вкладке Console (только эту вкладку включить надо)

Electric200 01.03.2009 22:14

На работающий вариант ссылку дать не могу, так как система внутризеренного пользования и доступ естественно запаролен..
а ты попробуй - вместо того, чтобы писать alert('asd'); спасибо за совет, попробую обязательно. Но в решении моего вопроса это врятли поможет.. :no:

x-yuri 01.03.2009 23:00

Цитата:

На работающий вариант ссылку дать не могу, так как система внутризеренного пользования и доступ естественно запаролен..
ты можешь сделать упрощенный вариант, например - просто я не могу у себя запустить, посколько нужны данные из БД

а вообще делается так
<select id="list">
	<option>1
	<option>2
</select>
<select id="secondList">
	<option>
</select>

$(function() {
	$('#list').change(function() {
		$('#secondList').load('1.php');
	});
});

1.php выдает содержимое для второго списка

Electric200 01.03.2009 23:12

Если я верно понял, то это скрипт просто подтянет 1.php при событии change
в форме #list?

Ну а как мне передать таким скриптом value что бы сделать соответствующий запрос к БД?

1.php - у меня не статистический то

x-yuri 01.03.2009 23:27

Цитата:

Если я верно понял, то это скрипт просто подтянет 1.php при событии change
в форме #list?
list - с чего ты взял что это форма? Ты у меня хоть одну форму видел? list - id элемента

Цитата:

Ну а как мне передать таким скриптом value что бы сделать соответствующий запрос к БД?
http://docs.jquery.com/Ajax/load#urldatacallback
http://www.w3.org/TR/1998/REC-DOM-Le...ml#ID-94282980

Gennady 02.03.2009 21:23

To: Electric200
Вот статья Каскад раскрывающихся списков, где подробно рассказано как это делается. Есть пример. Работающий. И исходный код. А переточить под свои нужды проще простого...

Electric200 03.03.2009 11:15

Gennady огромное спасибо!!! я был у вас на сайте, и вы мне помогали.. Но этой статьи наверно не было...
Спасибо большое!!


Часовой пояс GMT +3, время: 09:40.