Текущий элемент $(this)

Разработка своих веб-приложений и страничек

Текущий элемент $(this)

Сообщение StasB » 17 фев 2011, 17:11

JQuery
Такая вот проблема... Не знаю как работает $(this)
В интернете ничего не нашел...

Вот код:
Код: Выделить всёРазвернуть
$(document).ready(function()
{
    $('.BlokProfileFriendsLeft .FriendsAddDelete').click(function()
    {
       $.ajax(
             {
                type: "POST",
                url: "profile/friends/add/submit.php",
                data: "FriendsAddDeleteId="+$(this).parents(".BlokProfileFriendsLeft").find("#FriendsAddDeleteId").val(),
                success: function(html)
                      {
                         $(this).parents(".BlokProfileFriendsLeft").animate({opacity: "hide"}, "slow");
                      }
             });
       return false;
    });
});


AJAX запрос происходит, скрипт "profile/friends/add/submit.php" выполняется, а вот прозрачность у текущего родительского элемента не меняется....

Если в строке:
Код: Выделить всёРазвернуть
data: "FriendsAddDeleteId="+$(this).parents(".BlokProfileFriendsLeft").find("#FriendsAddDeleteId").val(),

убрать $(this) то прозрачность изменится...

Я так понимаю это из-за того, что "текущий элемент" из
Код: Выделить всёРазвернуть
$('.BlokProfileFriendsLeft .FriendsAddDelete').click(function()

меняется на
Код: Выделить всёРазвернуть
data: "FriendsAddDeleteId="+$(this).parents(".BlokProfileFriendsLeft").find("#FriendsAddDeleteId").val(),


Но ведь #FriendsAddDeleteId находится внутри .BlokProfileFriendsLeft

Короче HELP =) Уже вторые сутки гуглю...
StasB
Начинающий участник
 
Сообщения: 11
Зарегистрирован: 04 фев 2011, 01:35

Re: Текущий элемент $(this)

Сообщение Zver » 17 фев 2011, 23:34

Код можно было бы и полностью, желательно с html.
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской

Re: Текущий элемент $(this)

Сообщение StasB » 17 фев 2011, 23:56

JS код (естественно фреймворк JQuery подключен):
Код: Выделить всёРазвернуть
$(document).ready(function()
{
    $('.BlokProfileFriendsLeft .FriendsAddDelete').click(function()
    {
       $.ajax(
             {
                type: "POST",
                url: "profile/friends/add/submit.php",
                data: "FriendsAddDeleteId="+$(this).parents(".BlokProfileFriendsLeft").find("#FriendsAddDeleteId").val(),
                success: function(html)
                      {
                         $(this).parents(".BlokProfileFriendsLeft").animate({opacity: "hide"}, "slow");
                      }
             });
       return false;
    });
});


HTML код:
Код: Выделить всёРазвернуть

<div class="BlokProfileFriendsLeft">
  <div>
    <div class="BlokProfileFriendsLeftAddLink">
      <a class="FriendsAddDelete">Отклонить</a>
      <input id="FriendsAddDeleteId" name="FriendsAddDeleteId" value="'.$friends_user['id'].'" type="hidden" />
    </div>
  </div>
</
div>
 

Таких блоков много... Т.е. вся страница может состоять примерно так:
Код: Выделить всёРазвернуть

<div class="BlokProfileFriendsLeft">
  <div>
    <div class="BlokProfileFriendsLeftAddLink">
      <a class="FriendsAddDelete">Отклонить</a>
      <input id="FriendsAddDeleteId" name="FriendsAddDeleteId" value="'.$friends_user['id'].'" type="hidden" />
    </div>
  </div>
</
div>

<
div class="BlokProfileFriendsLeft">
  <div>
    <div class="BlokProfileFriendsLeftAddLink">
      <a class="FriendsAddDelete">Отклонить</a>
      <input id="FriendsAddDeleteId" name="FriendsAddDeleteId" value="'.$friends_user['id'].'" type="hidden" />
    </div>
  </div>
</
div>

<
div class="BlokProfileFriendsLeft">
  <div>
    <div class="BlokProfileFriendsLeftAddLink">
      <a class="FriendsAddDelete">Отклонить</a>
      <input id="FriendsAddDeleteId" name="FriendsAddDeleteId" value="'.$friends_user['id'].'" type="hidden" />
    </div>
  </div>
</
div>
  


Т.е. нужно чтобы при нажатии на определенный ".FriendsAddDelete" определялся элемент "#FriendsAddDeleteId" в текущем родительском элементе ".BlokProfileFriendsLeft", а затем этот родительский элемент плавно поменял прозрачность...
StasB
Начинающий участник
 
Сообщения: 11
Зарегистрирован: 04 фев 2011, 01:35

Re: Текущий элемент $(this)

Сообщение Zver » 18 фев 2011, 11:51

Верный шаблон:
Код: Выделить всёРазвернуть

<div class="BlokProfileFriendsLeft">
  <div>
    <div class="BlokProfileFriendsLeftAddLink">
      <a class="FriendsAddDelete" href="#">Отклонить</a>
    </div>
  </div>
  <input class="FriendsAddDeleteId" name="FriendsAddDeleteId" value="'.$friends_user['id'].'" type="hidden" />
</
div>
 


Верный jQuery:
Код: Выделить всёРазвернуть

$(document).ready(function()
{
    $('.BlokProfileFriendsLeft .FriendsAddDelete').click(function()
    {
       $.post('profile/friends/add/submit.php', { FriendsAddDeleteId: $(this).parent('.BlokProfileFriendsLeft').children('.FriendsAddDeleteId').val() }, function(data)
       {
           $(this).parent('.BlokProfileFriendsLeft').fadeOut();
       }
    
       return false
;
    });
});
 


Ошибок много:

1. <input id="FriendsAddDeleteId" .... />. На странице не может быть более одного объекта с одним id.
2. jQuery.find();. При правильном построении шаблона и использование вместе с $(this) его использование невостребованное.
3. Будучи пользуйтесь fireBugом или другим отладчиком javascript.
4. Читайте доки http://docs.jquery.com/

И советую обновиться до jQuery 1.5.
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской

Re: Текущий элемент $(this)

Сообщение StasB » 18 фев 2011, 13:13

Почему не может быть более одного id ?

Спасибо, работает! (Только я к старой библиотеке как-то уже привык, мне надо то один аякс...)
StasB
Начинающий участник
 
Сообщения: 11
Зарегистрирован: 04 фев 2011, 01:35

Re: Текущий элемент $(this)

Сообщение Zver » 18 фев 2011, 16:17

Почему не может быть более одного id ?

http://softwaremaniacs.org/blog/2006/01 ... ifference/

Спасибо, работает! (Только я к старой библиотеке как-то уже привык, мне надо то один аякс...)

В основном разницы нет. В версии 1.5 полностью переработан ajax. Быстрее и кроссбраузернее. Решать вам.
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской


Вернуться в PHP, HTML, CSS...

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23