2013-05-22 52 views
1

我有一點彈出,有時包含鏈接,其他時間包含表單。表單由於返回false或stopPropogation而不提交

我有它的安裝和工作的鏈接,但jQuery停止表單提交。

我不能找出一種方法來允許表單提交,同時仍然停止鏈接射擊。

的jQuery:

$('#account').on('click', function() { 
    $('#account-options').fadeIn('slow'); 
    $(document).one('click', function() { 
     $("#account-options").fadeOut('slow'); 
    }); 
    return false; 
}); 

$("#account-options").on('click', function() { 
    return false; 
}); 

$('#account-options a').on('click', function(e) { 
    e.stopPropagation(); 
}); 

HTML:

{if logged_out} 
<li id="account"><a href="/login">Log In</a> 
    {exp:member:login_form return="/"} 
    <ul id="account-options" class="login"> 
     <li id="arrow"></li> 
     <li> 
      <label>Username</label> 
      <input type="text" name="username" value="" maxlength="32" size="25"> 
     </li> 
     <li> 
      <label>Password</label> 
      <input type="password" name="password" value="" maxlength="32" size="25">         
     </li> 
     <li> 
      <input type="submit" name="submit" value="Log In"> 
     </li> 
    </ul> 
    {/exp:member:login_form} 
</li> 
{if:else} 
<li id="account"><a href="/account">Your Account</a> 
    <ul id="account-options"> 
     <li id="arrow"></li> 
     <li><a href="">Edit Details</a></li> 
     <li><a href="">Add Submission</a></li> 
     <li><a href="{path='logout'}">Log Out</a></li> 
    </ul> 
</li> 
{/if} 

的標籤是從表達式引擎。

有誰知道如何對此進行排序?

+0

不清楚你在問什麼。你希望表單是通過點擊每個「a」還是點擊某個特定的「a」來提交? –

+0

啊,我的道歉。當用戶點擊輸入提交按鈕時,我需要提交表單。 – ccdavies

+0

'{exp:member:login_form return =「/」}'在html標記中創建表單嗎?如果沒有,你根本沒有提交表格。 –

回答

1

要停止所有鏈接的默認行爲li#account,使用以下命令:

$('#account').find('a').on('click', function(e) { 
    e.preventDefault(); // stops links from being followed 
}); 

然後切換淡入(上a[href="/login"]點擊)和輸出(任意點擊li#account外)的帳戶選項,使用以下命令:

$('#account').find('[href="/login"]').on('click', function() { 
    // do the DOM lookup just once and cache it, for better performance 
    $('#account-options').fadeIn('slow'); 
}); 
$(document).on('click', function(e) { 
    var target = $(e.target);console.log(target); 
    if (target !== $('#account') && target.closest('#account').length < 1) { 
     $('#account-options').fadeOut('slow'); 
    } 
}); 

不要從你的問題使用第二個功能,所有所做的是在li#account-options任意點擊,這是什麼,是保持從b您的形式返回false eing提交。

+0

已排序。謝謝。 – ccdavies

0

您可以檢查目標元件,它傳遞的事件對象的一部分:

$("#account-options").on('click', function(event) { 
    if (event.target.nodeName.toLowerCase() === "a") { 
     //anchor, cancel: 
     return false; 
    } 

    //user clicked something else, probably a submit button. Let it go trough. 
}); 

Live test case

相關問題