0

我正在使用 codeigniter,我在一个页面中有近 5 个 div,它们都具有与 php 生成的相同的 id。我有一个按钮和一个锚标签。单击时,它们都将调用相同的 jQuery 函数。

/*This div is in foreach*/
<div id="rev">

/*Here are 2 input fields*/
<input type="hidden" id="product_id" name="product_id" value="<?php echo $value['id']; ?>" />
<input type="hidden" id="user_id" name="user_id" value="<?php echo $this->session->user_data('user_id'); ?>" />

<p id="total_rev"><?php echo $value['total_review']; ?> Reviews</p>
<input type="button" id="write_review" value="Write a review..." />
</div>

问题从这里开始:我有 2 个隐藏输入,因为我必须在 jQuery 函数中获取 user_id 和 product_id。两个输入都是与按钮和锚点相同的父 div 的子元素。但是在所有页面中,有 5 次相同的帖子,并且所有帖子都有不同的 user_id 和 product_id。

我是 jQuery 的新手。只是想知道如何获取与单击按钮的同一 div 相关的 user_id 和 product_id。

$('document').ready(function() {
$('#write_review').click(function() {
    var product_id, user_id;
    var hidden_elemets = $(this).parent().siblings('input:hidden');
    $(hidden_elemets).map(function(){
        if($(this).name == 'res_id')
            alert(this.value);
    });
});
});

这是我到目前为止的 JQuery 函数

除了使用隐藏输入之外,还有其他方法吗?请赐教!

我希望你能理解我的问题!

4

2 回答 2

3

你根本不需要使用parent()。坚持下去siblings()。查看您的 HTML 内容:

<div id="rev"> <!-- The parent element -->
    <input type="hidden" /> <------
    <input type="hidden" />       |
                                  | These are all siblings of each other
    <p id="total_rev"></p>        |
    <input type="button" /> <------
</div>

当你得到那个parent()然后siblings(),你将返回到父级#rev,然后通过它的兄弟姐妹而不是事件处理程序的兄弟姐妹再次向下搜索。

只需siblings()使用#write-review

var $this = $(this),
    product_id = $this.siblings('#product_id').val(),
    user_id = $this.siblings('#user_id').val(),
    hidden_elements = $this.siblings('input:hidden');

jsFiddle

至于隐藏输入的替代方法?不,真的。正如 deceze 在这篇文章中所说:

隐藏的 HTML 输入应该不会导致任何安全问题,只要您在将它们放入数据库之前(再次)正确验证它们。

于 2013-06-30T07:15:40.640 回答
1

我通常要么使用.parent()要么.closest(:selector)

这是一个演示两者的jsfiddle

http://jsfiddle.net/xBfvp/

于 2013-06-30T06:49:12.090 回答