2012-06-05 30 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>