2016-02-13 57 views
0

我剛剛測試過這個工作在一個更大的項目中,其中設置的變量將用於其他設置。當選擇元素中的項目被選中時,cookie被設置並且頁面被重新加載,cookie值設置要在重新加載的頁面上使用的變量。在下面的測試代碼中,變量值被回顯出來,列表中的默認選定項目被設置爲匹配的變量值。js/php設置cookie並從選擇元素重新加載頁面

一切似乎在FireFox中正常工作,但在Chrome,Safari和IE中測試時,它只是沒有做任何事情。我試圖改變onMouseDown到onClick和不同的重新加載方式,如location.reload(true);

我錯過了什麼或錯誤的方式嗎?

<html> 
    <body> 

<script> 
    function setCookie(cvalue) { 
    document.cookie = "pick=" + cvalue + "; expires=Fri, 31 Dec 9999 23:59:59 GMT"; 
} 

    function selectreload() { 
    window.location.assign(document.URL); 
} 
</script> 

<?php 

$servernames = array("Server 1", "Server 2", "Server 3", "Server 4"); 

if(!isset($_COOKIE['pick'])) { 
    echo "No Cookie is set!<br>"; 
} else { 
    $serverselected = $_COOKIE['pick']; 
    echo $serverselected; 
} 
?> 

<select name="picks" id="picks"> 
      <option selected="selected">Choose your server</option> 
      <?php 
    foreach($servernames as $servername) { ?> 
    <option value="<?= $servername ?>" <?php if(isset($serverselected) && $serverselected == $servername){echo 'selected="selected';}?> onMouseDown="setCookie('<?= $servername ?>'); selectreload();"><?= $servername ?></option> 
    <?php 
    } ?> 
     </select> 
    </body> 
</html> 

感謝您的輸入。

回答

0

試試這個。我替換了你的PHP生成的列表,並用JS取而代之,以避免使用PHP。在這裏,當您選擇服務器並點擊'保存'時,它會創建一個cookie,然後當您重新加載時,它會根據保存的選擇自動在下拉列表中選擇正確的選項。

function getCookieValue(a, b) { 
    b = document.cookie.match('(^|;)\\s*'+a+'\\s*=\\s*([^;]+)'); 
    return b ? b.pop() : ''; 
} 
var doc = document.getElementById('list'); 
var list = ['server1','server2','server3','server4']; 
list.forEach(function(val,ind) { 
    var opt = document.createElement('option'); 
    opt.text = val; 
    opt.value = val; 
    if (getCookieValue('pick') === val) {opt.selected = true;} 
    doc.appendChild(opt); 
}); 
doc.addEventListener('change', function(){ 
    var server = doc.options[doc.selectedIndex].value; 
    document.cookie = 'pick='+server+'; expires=Fri, 19 Feb 2016 23:59:59 GMT'; 
    location.reload(); 
}); 

和HTML一起去吧。

<select id="list"></select> 

這裏是它的一個演示:https://jsfiddle.net/wqh1odmk/10/

請注意,而JS是的jsfiddle正常使用不保存Cookie,這樣您就必須對其進行測試,在自己的應用程序來代替。

編輯:我修改了我的上面的代碼,因此它將cookie保存在'更改'而不是按下按鈕。它也將同時重新加載頁面。

+0

感謝您的回覆。是否可以不使用按鈕,所以當選擇它的項目提交/重新加載頁面? – Ads

+0

我修改了我的上面的代碼,因此它將Cookie保存在「更改」而不是按下按鈕上。如果此答案回答了您的問題,請考慮接受我的答案,方法是點擊答案的左上角的複選標記。 – Err

+0

這一切都很好,但保存在Cookie中的值是所選項目的數字ID,而不是名稱,而不是服務器1 - 服務器4的名稱0 - 3。是否可以保存名稱?感謝您的回覆。 – Ads

相關問題