You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用localStorage.setItem和JQuery跨页传值失败,问题何在?

问题原因及解决方案

核心问题1:AJAX异步执行的时序错误

popuniZadatke()中的AJAX请求是异步操作,它会在后台加载选项数据,而你同步调用的izaberi()会在AJAX完成前执行——这时候<select>标签里还没有任何从后端加载的选项,自然无法设置对应的值。

核心问题2:编辑按钮的跳转被阻止

izmeni()函数里的return false会阻止表单的提交动作,导致用户点击按钮后根本跳不到izmeni.php页面,编辑页也就拿不到存在localStorage里的ID值。


修复方案

解决时序问题:将izaberi()移到AJAX回调中

确保只有当<select>的选项加载完成后,再执行设置值的逻辑:

function popuniZadatke() {
    $.ajax({
        url: '../funkcije/popuniZadatke.php',
        success: function (data) {
            $("#zadatak").html(data);
            // 选项加载完成后再调用选择逻辑
            izaberi();
        }
    });
}
popuniZadatke();

function izaberi() {
    const zadatakId = localStorage.getItem("id");
    // 先判断ID是否存在,避免空值无效设置
    if (zadatakId) {
        $("#zadatak").val(zadatakId).change();
    }
}

解决跳转被阻止的问题

有两种可选方式:

  1. 移除return false,让表单正常提交
    修改izmeni()函数:
function izmeni() {
    let zadatak = <?=$podaci->zadatakID?>;
    localStorage.setItem("id", zadatak);
    // 移除return false,允许表单提交跳转
}
  1. 改用JS直接跳转,移除表单标签
    修改HTML按钮:
<button type="button" class="dugmedetalji" name="button2" onclick="izmeni()">Izmeni zadatak</button>

修改izmeni()函数:

function izmeni() {
    let zadatak = <?=$podaci->zadatakID?>;
    localStorage.setItem("id", zadatak);
    // 直接跳转到编辑页
    window.location.href = "izmeni.php";
}

额外注意:数据类型统一

localStorage存储的都是字符串类型,如果zadatakID是数字,建议存的时候转成字符串,避免类型不匹配:

localStorage.setItem("id", zadatak.toString());

内容的提问来源于stack exchange,提问作者user21626341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:37:54