使用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(); } }
解决跳转被阻止的问题
有两种可选方式:
- 移除
return false,让表单正常提交
修改izmeni()函数:
function izmeni() { let zadatak = <?=$podaci->zadatakID?>; localStorage.setItem("id", zadatak); // 移除return false,允许表单提交跳转 }
- 改用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
相关产品推荐
相关产品推荐

