【问题标题】:To make an action based on the link location by jQuery通过 jQuery 根据链接位置进行操作
【发布时间】:2010-11-23 22:42:37
【问题描述】:

如何检索给定链接的 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。

【问题讨论】:

  • 您可能应该解释一下问题是什么......“这里的问题”并没有说太多。您编写的代码应该“工作”,只要它将检索rel 属性的值并将其传递给您的处理程序......如果您只想要被点击的链接的索引,我'我不确定问题的其余部分是关于什么的。

标签: php jquery find hyperlink


【解决方案1】:

我可以看到这段代码有几个问题:

  1. 您有多个&lt;div id='one_answer'&gt;。 ID 应该是唯一的,因此$("#one_answer").removeClass("yellow"); 将始终选择第一个 div,而不是所有 div。
  2. delete_an_answer.php - 在 php 中您正在寻找 $_POST['answer'],但 ajax 有 {question_id: jQuery(this).attr('rel')}
  3. 您的示例中的链接没有relhref='$',这很奇怪。 &lt;div id='one_answer&gt; 也坏了,应该是另一个单引号。我认为这些是复制粘贴问题。

【讨论】:

  • 您能否澄清一下(2)的意思。 - 你的意思是我应该把代码改成{question_id: $(#one_answer).attr('rel')}
  • 我在stackoverflow.com/questions/1351063/using-post-in-jquerystackoverflow.com/questions/1351063/using-post-in-jquery 的基础上打开了一个新线程,关于 jQuery 中对 POST 变量的引用。
  • #1 与 POST 无关 - 您有许多具有相同 ID 的对象 - 这会产生错误,并且无效。 #2:您正在使用密钥question_id 从javascript 发送rel 数据,但在php 上您尝试读取密钥answer。试试 $_POST['question_id']
【解决方案2】:

好的,好吧...要回答您的第一个问题,您可以使用 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...
  ...
});

至于你剩下的问题,我真的不知道你在问什么。

【讨论】:

  • 感谢您的反馈! - 我澄清了我的问题。
  • 目前的问题是我不知道 $_POST['body'] 包含什么。如果我知道这一点,那么我就能知道问题出在哪里。
  • 我打开了这个帖子,目的是先解决另一个问题stackoverflow.com/questions/1350779/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2014-01-17
相关资源
最近更新 更多