jQuery无法将val()与parent()结合使用

时间:2013-06-11 10:38:58

标签: jquery

我试图获得班级的价值' ajax_fields'。该页面包含多个表,因此我必须使用jQuery parent()函数。

$(document).ready(function() {

    $('.hide_table').live('click', function() {
        alert($(this).parent(".row").find('.ajax_fields').val());
    });    

}); 

上面你看到我的jQuery代码。

<div id="content">
<div id="id_pages">
    <div class="row">
        <div class="table width_100">
            <input type="hidden" class="ajax_fields" value="title,url" />
            <input type="hidden" class="ajax_table" value="pages" />
            <div class="form_title">
                <h2>Pagina's</h2>
            </div>
            <table cellspacing="0" cellpadding="0">
                <thead>
                    <tr>
                        <td width="10px"></td>
                        <td width="10px"></td>
                        <td>title <a class="hide_table" id="verberg_title">x</a></td>
                        <td>url <a class="hide_table" id="verberg_url">x</a></td>
                    </tr>
                </thead>
            </table>
        </div>
    </div>
</div>

在这里,您可以看到相关的HTML代码,当我点击时,我会收到一条提示“未定义”的提示。我做错了什么?!

我也尝试了以下选项,但它们也没有用。

$(this).parent(".row").children('.ajax_fields').val();
$(this).closest('.ajax_fields').val();

5 个答案:

答案 0 :(得分:0)

使用.on() .live()已弃用

    $(document).on('click','.hide_table', function() {
        alert($(this).closest('.row').find('.ajax_fields').val());
    });  

答案 1 :(得分:0)

你可以这样做:

$('.hide_table').on('click', function (e) {
    e.preventDefault();   // Cancel the default action (navigation) of the click
    alert($(this).closest('.row').find('.ajax_fields').val());
});
  • $(this)会为您提供已点击的链接。
  • closest('.row')将通过测试元素本身并遍历DOM树中的祖先来为您提供与选择器'.row'匹配的第一个元素。
  • find('.ajax_fields').val()会找到ajax_fields输入并获取其值。

答案 2 :(得分:0)

.parent()仅搜索直接父级,.children()仅搜索直接子级。您可以改为使用.parents().find()

$(this).parents(".row").find('.ajax_fields').val();

此外,.live()在1.7中已弃用,在1.9中已删除。请改为.on()

答案 3 :(得分:0)

要从.hide_table转到.ajax_fields,您可以使用.closest()通过迭代父母来选择<div class="row">,然后执行.find()

$(this)
    .closest('.row')
    .find('.ajax_fields')
    .val();

此外,您不应再使用.live(),因为它是deprecated。使用.on()代替使用事件委派是一种很好的做法:

$('#id_pages').on('click', '.hide_table', function(e) {
    e.preventDefault();
    // your code
});

最后,不建议在锚点上省略href属性:

<a href="#" class="hide_table" id="verberg_title">x</a>

答案 4 :(得分:0)

<input type="hidden" class="ajax_fields" value="title,url" />不是<a class="hide_table" id="verberg_title">x</a>的祖先,当然它不是它的父元素。它就像一棵家谱,一个远房表亲不能是你的父亲(好吧,通常不是)

你基本上需要找到一个真正的共同祖先:

$(this).closest(".table") // $(this).closest(".row") will also do

...然后找到合适的后代:

.find('.ajax_fields')