2014-07-25 124 views
0

自定義「登錄」和「退出」切換鏈接的代碼段代碼適用於舊的無響應模板,但在響應模板上時表現不佳。當它寫入html行時,它實際上將<body>中的所有內容替換爲代碼中引用的<a>JQuery登錄註銷語句代碼無法正常工作

這裏是的Bigcommerce被許多網上的原始的自定義代碼片段(無響應主題):

<li class="loginLogout"><span> 
<script type="text/javascript"> 
//<![CDATA[ 

var GlobalFname="%%GLOBAL_CurrentCustomerFirstName%%"; 

if (GlobalFname!="" && GlobalFname!="Guest") 
{ 
    //Customer is Logged On 
    document.writeln ('<a href="%%GLOBAL_ShopPath%%/login.php?action=logout">Sign out</a>'); 
} else { 
    //Customer is not Logged On 
    document.writeln ('<a href="%%GLOBAL_ShopPath%%/login.php">Sign in</a>'); 
    }; 
//]]> 
</script> 
</span> </li> 

我不知道爲什麼它會取代<body>用這裏面的一切.... "document.writeln...."因此,你所得到的只是網頁上的實際鏈接,就是這樣。

這裏是我試圖實現,並與只有「一個警告」的工作原理:

它不會改變「註銷」鏈接,直到您刷新頁面,或轉到其他頁。變量%%GLOBAL_CurrentCustomerFirstName%%確實會改變,但jquery不會在「else」語句中加載新鏈接。

這裏是我已經得到了,除了上述這個問題的工作代碼(它不是<li>像第一里面,取而代之的則是剛剛在自己的頁面上):

<div id="TopMenu"> 
    <ul> 
    <li class="loginLogout login"> 
     <div class="loginContainer"> 

     </div> 
    </li> 
    </ul> 
    </div> 

    <script type="text/javascript"> 

    var loginString = '<a href="%%GLOBAL_ShopPath%%/login.php"><i class="icon-lock"></i><span class="narrow_hide">Login</span></a>'; 
    var logoutString = '<a class="logout_link" href="%%GLOBAL_ShopPath%%/login.php?action=logout"><i class="icon-lock"></i><spanclass="narrow_hide">Logout</span></a>'; 
    var GlobalFname = "%%GLOBAL_CurrentCustomerFirstName%%"; 


    if(GlobalFname == "") { 
     $("#TopMenu .loginContainer").html(loginString); 
    } 
    else if(GlobalFname == "Guest") { 
     $("#TopMenu .loginContainer").html(loginString); 
    } 
    else { 
     $("#TopMenu .loginContainer").html(logoutString); 

    } 

    </script> 

我將不勝感激。我曾嘗試推行$(document).ready(function(),甚至試圖:

$(".login_link").hide(); 
$(".logoutContainer").html(logoutString); 

把它的<li><div>內CDATA內也沒有幫助。

但我想如何使最終的「註銷」/「註銷」鏈接顯示,而不必手動重新加載頁面的損失。感謝您的任何見解!

+0

猜測在這裏工作 - 你正在使用某種我不認識的模板引擎。確保'GlobalFname'的值是你期望的**在你使用它的時候**。我的第一個猜測是,實際的登錄/註銷邏輯直到後來纔會發生,因此您的數據過時了 - 而過時的數據就是您需要刷新的原因。提到你使用的模板引擎會有很大的幫助。 *提示:如果語句正常工作,則它們是JavaScript的一個經過充分測試的部分,不存在已知的錯誤。它總是歸結爲給他們不正確的數據。* –

+0

非常感謝建議@JeremyJStarcher!我正在使用Bigcommerce。他們有他們自己的登錄/註銷片段,但是它根本不可編輯,因爲它在全局變量中。過去這種做法主要是針對舊的無響應主題,但在響應式主題中,當您想進行自定義時,這裏發生了一些變化,而且仍然是不可編輯的。真正奇怪的是,第一個代碼片段實際上是如何去除body標籤內的所有內容,然後在響應主題中插入一個鏈接。所以有些事情不太正確。 – user3550093

+0

當底部代碼片段處於活動狀態,並且您單擊action = logout鏈接時,在源代碼中,GlobalFname已更改回「Guest」。所以它似乎刷新了數據,但由於某種原因,它不會重寫if語句中的鏈接。也許我需要傳遞一些Ajax代碼,但我還沒有想出如何做到這一點,雖然。非常感謝您的意見。 – user3550093

回答

0

我終於得到了一個簡單的代碼,終於可以工作,萬一有人需要這個!

<li class="login_logout"><a href="/login.php">Login</a></li> 

<script type="text/javascript"> 

    var GlobalFname="%%GLOBAL_CurrentCustomerFirstName%%"; 

    if (GlobalFname === undefined || GlobalFname === null || GlobalFname === "Guest") { 
     // do nothing 
    } 
    else { 
     $(".login_logout a").prop("href", "/login.php?action=logout"); 
     $(".login_logout a").text("Logout"); 
    } 

</script>​