如何在jQuery中从最近的表单获取属性操作?

时间:2012-06-05 15:09:14

标签: jquery ajax forms

我正在尝试解决一个问题,当用户点击提交按钮时,我需要从父表单中抓取action="/uri/"。如果我使用$(form).live('submit')它只能工作一半的时间。所以我使用的是$('input[type=""]').live('click')。但是正如你在下面的代码中看到的那样,我试图抓住action属性并且它无法识别它,或者说我似乎无法抓住.attr('action')

<script>
var get_pages_load_options = { 
    target:        '#content',
    beforeSubmit:  showRequest,
    success:       showResponse
};
$('input[type="submit"]').live('click',function(event){
    var url = $(this).closest("form").attr('action');
    var named = $(this).closest("form").attr('id')
    console.debug(url+"/"+named);
    $("#"+named).ajaxForm(get_pages_load_options);
    $.ajax({
        type: "POST",
        url: url,
        data: {ajaxtype: "side"},
        success: function(data) {
            $("#sidebar_menu").html(data);
        }
    });
    event.preventDefault();
    return false;
});
</script>

我尝试使用的html看起来像这样(为了便于阅读,删除了PHP):

<tr>
    <td class="bold" colspan="2">
        <form id='defcon_form' name='defcon_form' action='/cityhall/' method='post'>
            <div class="left">
                Realm Hoarding 
                <select name='defcon_rate'>
                    <option value='0'>None</option>
                    <option value='10'>Low</option>
                    <option value='20'>Medium</option>
                    <option value='30'>High</option>
                    <option value='50'>Critical</option>
                </select><br />
                <font size='-4'>(Stashes Gold/Turn, Decreases Defense)</font>
            </div><div class="right">
                <input type='submit' name='defcon' value='Update Hoarding!' />
            </div>
        </form>
    </td>
</tr>

我知道HTML不是最好的,我需要回去修改一下。

3 个答案:

答案 0 :(得分:1)

您的HTML无效。 <tr></tr>个元素只能包含<td></td><th></th>个元素。无效的html会在浏览器中产生不一致的结果,或者在任何浏览器中都可能无法正常工作。

https://developer.mozilla.org/en/HTML/Element/tr

将表单包裹在整个表中而不是每个tr中,并为每个tr提供一个数据键以包含给定tr的id。有了它,您可以捕获任何到达表单的提交,使用$(this).closest('tr').data("key")获取当前行的ID,然后从所述tr中的输入中发布值。

答案 1 :(得分:0)

而不是.closest尝试使用.parent,如:

var url = $(this).parent().attr('action');

答案 2 :(得分:0)

试试这个

<script>
$('input[type="submit"]').click(function(event){
    event.preventDefault();
    var url = $(this).parents("form").attr('action');
    console.debug(url);
    $(this).ajaxForm(get_pages_load_options);
    $.ajax({
        type: "POST",
        url: url,
        data: {ajaxtype: "side"},
        success: function(data) {
            $("#sidebar_menu").html(data);
        }
    });
    return false;
});
</script>