Чтобы выполнить действие на основе местоположения ссылки с помощью jQuery

Как получить значение атрибута rel данной ссылки и передать его обработчику?

У меня есть список ссылок, таких что

Список ссылок

<div id='one_answer'>Answer1
    <a href="$" class="delete_answer" rel='Answer1'>delete</a>
</div>
<div id='one_answer'>Answer2
    <a href="$" class="delete_answer" rel='Answer2'>delete</a>
</div> 
<div id='one_answer'>Answer3
    <a href="$" class="delete_answer" rel='Answer3'>delete</a>
</div>

Эти ссылки генерируются следующим кодом. Следующее значение rel не передается обработчику.

Ссылки, сгенерированные PHP

    echo ($answer . "<a href='#'"                                                                                                                  
        . "class='delete_answer'"
        . " rel='" . $body . "'"         // I identify the answer
                                         // by the body of the answer
                                         // in the database
        . ">delete</a>"
    ); 

Пользователь нажимает вторую ссылку. Атрибут rel должен передавать ответ обработчику. jQuery должен выполнить следующее действие на основе данных POST.

JQuery

jQuery('a.delete_answer').live('click', function(){
    jQuery.post('/codes/handlers/delete_an_answer.php', 
        { delete_answer: jQuery(this).attr('rel') },    
        function(){
            $("#one_answer").removeClass("yellow");
        })
});

Файл delete_an_answer.php

$dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123");
// remove the answer
$result = pg_query_params ( $dbconn,                                                                                                                                                                           
    'DELETE FROM answers 
    WHERE answer = $1',
    array ($_POST['answer'] )    // Problem here, because
                                 // $_POST['answer'] is empty when it gets here
                                 // so no answer is deleted
);

Я получаю ответы от Postgres и в то же время устанавливаю значение атрибута rel равным $body.


person Léo Léopold Hertz 준영    schedule 29.08.2009    source источник
comment
Вы, вероятно, должны объяснить, в чем проблема... проблема здесь мало что говорит. Код, который вы написали, должен работать, поскольку он извлекает значение атрибута rel и передает его вашему обработчику... Если вам просто нужен индекс ссылки, по которой щелкнули, я не уверен, что в остальном вопрос.   -  person Shog9    schedule 29.08.2009


Ответы (2)


Я вижу несколько проблем с этим кодом:

  1. У вас есть более одного <div id='one_answer'>. Идентификаторы должны быть уникальными, поэтому $("#one_answer").removeClass("yellow"); всегда будет выбирать первый div, а не все div.
  2. delete_an_answer.php - В php вы ищете $_POST['answer'], но в ajax есть {question_id: jQuery(this).attr('rel')}.
  3. Ссылки в вашем образце не имеют rel и href='$', что странно. Также <div id='one_answer> не работает, должна быть еще одна одинарная кавычка. Я предполагаю, что это проблемы с копированием и вставкой.
person Kobi    schedule 29.08.2009
comment
Не могли бы вы уточнить, что вы имеете в виду под (2). - Вы имеете в виду, что я должен изменить код на {question_id: $(#one_answer).attr('rel')}? - person Léo Léopold Hertz 준영; 29.08.2009
comment
Я открыл новый поток на основе вашего пункта № 1 здесь stackoverflow.com/questions/1351063/using-post- in-jquery о ссылке на переменную POST в jQuery. - person Léo Léopold Hertz 준영; 29.08.2009
comment
# 1 не имеет ничего общего с POST — у вас есть много объектов с одним и тем же идентификатором — это создает ошибки и недействительно. #2: Вы отправляете rel-данные из javascript с ключом question_id, но на php пытаетесь прочитать ключ answer. попробуйте $_POST['question_id'] - person Kobi; 29.08.2009

Хорошо, хорошо... Чтобы ответить на ваш первый вопрос, вы можете получить индекс элемента, который был нажат, в массиве элементов, соответствующих заданному селектору, используя jQuery index() метод:

$('a.delete_answer').live('click', function()
{
  var index = $("a.delete_answer").index(this);
  // index will be 0 for the first matching link, 
  // 1 for the second, and so on. Do what you will with this...
  ...
});

Что касается остальной части вашего вопроса, я действительно понятия не имею, о чем вы спрашиваете.

person Shog9    schedule 29.08.2009
comment
Спасибо за ваш отзыв! - уточнил я свой вопрос. - person Léo Léopold Hertz 준영; 29.08.2009
comment
Текущая проблема заключается в том, что я не знаю, что содержит $_POST['body']. Если бы я знал это, то я бы знал, в чем проблема. - person Léo Léopold Hertz 준영; 29.08.2009
comment
Я открыл этот поток, целью которого является сначала решить другую проблему stackoverflow.com/questions/1350779/ - person Léo Léopold Hertz 준영; 29.08.2009