Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2013, 18:50
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Достать значения input'ov
Здравствуйте, совсем недавно начал изучать js, так что я еще совсем чайник.

Сейчас на сайте делаю что-то вроде стены как ВК, так вот на этой стене есть 10 блоков с сообщениями, структура каждого блока следующая:

<div id='block'>
<input type='hidden' value='$id_message' id='id_mes'>
<textarea rows='1' placeholder='Оставить комментарий..' id='com'</textarea>
<input type='submit' value='Комментировать' class='button_comment' id='submit'>
<div></div>
</div>


Первый инпут скрыт, в него php код вставляет id сообщения к которому идет комментарий. То есть, например пользователь комментирует 5-ый комментарий, то в первый инпут в id пойдет цыфра 5.

Весь код php работает замечательно, но нужно сделать чтобы еще работало на ajax'e. Для этого есть такой код:

$(function(){
   $("#submit").click(function(){
      var com=$("#com").val();
      var id_mes=$("#id_mes").val();
      $.ajax({....


И вот тут уже у меня нечего не получается, проблема в том что я не знаю как вытащить данные именно из того блока по которому кликнули. Этот код работает только с первым комментарием, видимо js обнаруживает все данные у первого комментария и дальше "искать" не хочет.

Мне нужно написать корректно код, чтобы вытаскивались данные именно из того блока комментариев по которому было нажато, как это сделать, помогите пожалуйста! Уже неделю не могу разобраться... пробовал и this писать... все-равно не получается.
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2013, 19:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Vladislav
вот на этой стене есть 10 блоков с сообщениями,
Vladislav,
Приведите HTML для двух блоков, (*пока не понял различия
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2013, 20:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

id - Identificator - Идентификатор - идентифицировать - уникальность.
У вас же нет никакой уникальности
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2013, 20:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<form>
<div id='block'>
<input type='hidden' value='$id_message' id='id_mes' name='id_mess'>
<textarea rows='1' placeholder='Оставить комментарий..' id='com' name='comment'></textarea>
<input type='submit' value='Комментировать' class='button_comment' id='submit'>
<div></div>
</div>
</form>

<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(".button_comment").click(function(e){
        var data = $(this.form).serialize();
        var url = 'comment/add'
        $.ajax({
            url: url,
            data: data,
            complete: function(){}
        });
        alert(data);
        e.preventDefault();
    });
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2013, 20:37
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

а как сделать уникальность? если мне нужно дать все кнопкам одинаковый id, чтобы работать через js.
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2013, 20:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vladislav
мне нужно дать все кнопкам одинаковый id, чтобы работать через js
Это как:
"Мне нужно дать всем своим детям одинаковые имена, чтобы было удобнее обращаться к ним"

Vladislav, не могли бы вы приоткрыть слегка свои глаза и взгянуть на предлагаемый мною код? Особенно нужно напрячься и разглядеть 12-ю строчку.
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2013, 21:07
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Сообщение от danik.js Посмотреть сообщение
Это как:
"Мне нужно дать всем своим детям одинаковые имена, чтобы было удобнее обращаться к ним"

Vladislav, не могли бы вы приоткрыть слегка свои глаза и взгянуть на предлагаемый мною код? Особенно нужно напрячься и разглядеть 12-ю строчку.
Простите. Не заметил, что вы написали. Объясните пожалуйста, что вы подключили в 10ой строчке или вы просто для примера подключили это?

Потом я не могу понять, зачем буква "е", в конце 12-ой строчке.
И еще:

var data = $(this.form).serialize();
var url = 'comment/add'


Что за переменные вы тут создаете, почитал про serialize ("В Javascript можно сериализовать данные и получить сериализованную строку точь в точь как в PHP."), но опять же не понял что это. Может быть все данные с этой формы заносятся в переменную data?

А вторая переменная url зачем была создана?


Извините за нубство, пожалуйста разъясните) Я хочу понять это.
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2013, 21:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vladislav
вы подключили в 10ой строчке
Это библиотека jQuery конечно же. Подключена с CDN (Content Delivery Network) jQuery
Сообщение от Vladislav
зачем буква "е"
В обработчик события передается объект (событие). Содержит координаты места клика, состояние клавиш Shift, Ctrl и тд, и прочая инфа.
В том числе имеет метод preventDefaul() для предотвращения действия по умолчанию. Если его не предотвратить, то произойдет отправка формы, тоесть уход со страницы.

В jQuery, вместо e.preventDefault() можно просто венуть false, и это также отменит действие по умолчанию.

$(".button_comment").click(function(){
....
return false;
});

Сообщение от Vladislav
заносятся в переменную data
Именно. Причем вввиде строки 'param1=value1&param2=value2...'. А это один из форматов, понимаемых $.ajax({data: ...});

Сообщение от Vladislav
А вторая переменная url зачем была создана
Можно не создавать, можно прямо указать в опциях $.ajax({url: 'путь/до/контроллера'});
Ответить с цитированием
  #9 (permalink)  
Старый 13.02.2013, 22:03
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Спасибо большое, я все понял, кроме одного момента, я так и не понял:

var data = $(this.form).serialize();


Ну вот смотрите:

<input type='hidden' value='$id_message' id='id_mes' name='id_mess'>
<textarea rows='1' placeholder='Оставить комментарий..' id='com' name='comment'></textarea>
<input type='submit' value='Комментировать' class='button_comment' id='submit'>


Пользователь введет комментарий и нажмет "отправить", мы с помощью js делаем:

var data = $(this.form).serialize();


Отправляем все это в php обработчик, но в php мне нужно получить переменные: comment и id_message, а как я их получу? Можете на примере показать?

Раньше я в js делал вот так:

var comment=$("#comment").val();
var id_message=$("#id_message").val();
Ответить с цитированием
  #10 (permalink)  
Старый 13.02.2013, 22:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Так ведь мы передаем data в $.ajax(options) (17 строка)
В случае GET запроса (а $.ajax по умолчанию делает get-запрос, и следует выставить post вместо него) будет сделан запрос на site.ru/path/to/controller?&comment=БлаБла&id_mess=5

Что в пхп достается через
$message_id = (integer) $_GET['id_mess'];
$comment_content = (string) $_GET['comment'];


Но нужно выставить $.ajax({type: 'POST'});

Тогда на серваке нужно будет использовать $_POST[]

Сообщение от Vladislav
аньше я в js делал вот так:

var comment=$("#comment").val();
var id_message=$("#id_message").val();
ОК. А дальше как?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение значения input при смене значения select galart jQuery 4 30.01.2015 19:39
Подскажите как достать значение из асс. массива posta Серверные языки и технологии 7 25.11.2012 00:38
Как достать вложеный метод? GhostSt Общие вопросы Javascript 2 29.05.2012 21:07
получение значения из классов karmis Events/DOM/Window 1 14.10.2011 19:09
Вытащить со страницы все значения name и value из тегов <input> qwr938 Общие вопросы Javascript 8 13.02.2011 15:16