通过引用$(this)而不是$(“表单选择”)来获取表单中的所有选择元素

时间:2010-03-05 11:03:50

标签: jquery jquery-selectors jquery-traversing

我目前正在使用以下内容获取表单中存在的所有Select元素:

$("form").submit(function(event)
{
    // gather data
    var data = GetSelectData($("form select"));

    // do submit
    $.post($(this).attr("action"), data, ..etc)
});

有没有一种方式可以说像

,而不是传入$("form select")
$(this).children('select') // this doesn't work, btw

获取submit事件正在执行的表单上下文中存在的所有select元素?

这将允许我将代码缩减为以下内容,将所有功能转移到一个通用功能中:

$("form").submit(function(event)
{
    GatherDataAndSubmit($(this));
});

function GatherDataAndSubmit(obj)
{
    var data = GetSelectData(obj.children('select'));

    $.post(obj.attr("action"), data, ..etc)
}

由于

戴夫

2 个答案:

答案 0 :(得分:5)

使用.find()

尝试

var data = GetSelectData(obj.find('select'));
  

.find()和.children()方法   是相似的,除了后者   只走一层   DOM树。

$("form").submit(function(event)
{
    GatherDataAndSubmit($(this));
});

function GatherDataAndSubmit(obj)
{
    var data = GetSelectData(obj.find('select'));

    $.post(obj.attr("action"), data, ..etc)
}

答案 1 :(得分:1)

$("form").submit(function(event) {
    // gather data
    var data = GetSelectData($("select", this));

    // ...
});

在可能的情况下始终指定第二个参数,它指定选择器实际搜索的上下文/范围。