2012-06-05 49 views
0

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

<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

您无法嵌套'form'元素 – xandercoded

+0

您确定您的提交按钮位于表单标签内且表单标签具有操作属性吗? 'console.log($(this).closest(“form”)。get())' –

+0

改变了措辞,以确保它更清晰。 – OpensaurusRex

回答

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中输入来自输入的值。

+0

嗯,我该如何修复HTML,使表单遍历两个'​​'元素? – OpensaurusRex

+0

我会在整个表格周围使用一个单独的表格,并在每一行的基础上处理表格数据。 –

+0

好的,表格实际上可以将''分开,因为它不是关键信息,甚至不会使用'colspan =“2”'作为'​​'。让我尝试一下,看看我能否实现它。 – OpensaurusRex

0

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

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

如果'.closest()'不起作用,'.parent()'绝对不行。 –

+0

唯一的问题是,父母是'​​'标签,哈哈。我已经尝试过了。 – OpensaurusRex

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>