2016-02-13 101 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

相关问题