看来,prev()不起作用

时间:2013-12-05 12:35:53

标签: javascript php jquery

我在一个文件中有这样的代码......

      $d = new db();
class db
{
 function fetchform()
 {
    global $wpdb;
    $content='';
    $result = $wpdb->get_results("select * from kp_contact_form",ARRAY_A);
    $path =plugins_url().'/kp_contactus/ajax.php';
    $content.='<form action="'.$path.'" method="POST">';
    $content.= '<table><span id="error"></span>';
    foreach ($result as $row )
    {
        $content.='<tr><td><label>'.$row['label'].'</label> </td>
        <td><input type="'.$row['type'].'" name="'.$row['name'].'" required> </td>
        <td><a href="#" id="'.$row['fid'].'" class="remove">Remove</a></td>';
    }
    echo $content;
  }
}

这里我打印的功能数据

 <div id="showform" style="margin-top: -100px">
        <?php $d->fetchform(); ?>
 </div>

现在我想获取输入类型的名称属性

 $(".remove").click(function(){
        alert("hii");
        var fid=$(this).prev().attr('name');
        alert(fid); // giving undefined
  }

当我正在做警告时,我正在未定义 ...我不知道我的代码出了什么问题..

任何人都可以帮助我

提前致谢

3 个答案:

答案 0 :(得分:2)

.remove的前一个元素是......什么都没有!这是因为.removetd中的第一个元素。你需要抓住父元素,它的前一个兄弟,最后是输入元素:

var fid = $(this).parent().prev().find("input").attr('name');

答案 1 :(得分:2)

它不起作用,因为a位于td内,因此没有兄弟姐妹。你能做的是:

$(this).closest('td').prev().find('input').attr('name');

这会选择最近的td父级,选择之前的td,然后选择其中的input

澄清:
我选择了closest()而不是parent(),因为如果您恰好将a包裹在closest()之后的另一个元素中,那么它仍然有效。

答案 2 :(得分:0)

这是删除链接,它是td的唯一子节点,所以没有prev(),试试这个:

$(this).closest('tr').find('input').attr('name')