html + js + jq 为老旧代码进行部分改造
遇到一个思路问题,页面上现在有一个下拉框,现在这个下拉框我只想写一次(不要在每个页面都写),相当于公用吧,然后对于每个页面我都是用的ifarm来显示子页面,要求是,我切换下拉框的时候,所有的子页面都能够根据下拉选项完成数据更新(不刷新页面)。
问题难点:我不知道如何去在其他子页面像vue 一样监听到下拉框变化。备注:下拉框我写在了index.html页面,其他页面要跟着响应
尝试过 Object.defineProperty 方法去监听本地缓存, 失败了,无法获取这个属性,求一个思路或者解决办法
ifarm 设计页面跨域通信吧,你这个不在一个页面肯定监听不到,除非挂载到一个公共的域,比如顶级的window下,或者啥的,再去做监听,不确定可行。你试试。
可以使用 include 标签引入你的下拉框,下拉框加一个onblur事件,点击的时候获取你的值,然后ajax请求数据,再把数据给你的页面
不跨域的话,可以考虑直接使用iframe对象调用,可以参考文章 https://www.cnblogs.com/ljhero/archive/2011/07/09/2101540.html
跨域的话,可以考虑使用postMessage,可以参考文章 https://juejin.cn/post/6844904120680185869
<script src="jquery.min.js"></script>
<select id="select">
<option value="1">值1</option>
<option value="2">值2</option>
<option value="3">值3</option>
</select>
<iframe src="test1.html" id="iframeSon" width="700" height="300" frameborder="0" scrolling="auto"></iframe>
<script>
$(function(){
$("#select").change(function(){
var v=$("#select").val();
//alert(v);
if(v==1){
$("#iframeSon").attr("src","t1.html");
}else if(v==2){
$("#iframeSon").attr("src","t2.html");
}else if(v==3){
$("#iframeSon").attr("src","t3.html");
}
})
})
</script>
iframe默认显示t1.html,然后根据选项加载不同的HTML内容,每个HTML内容你可以根据select选项提前加载JSON数据,不同select选项用不同HTML,HTML相当于缓存数据,可以根据你后端select选项,循环生成HTML数据,这个和缓存区别不大
你可以使用jq的load()方法来加载子页面,这样页面变量是可以直接共享的。
如:父页面js,下拉框更改时将变量修改
```html
var testVal = "123";
function click(){
testVal = 456
$("#service-content").load('ybjk/product.html'); //修改变量后重新执行load可更新
}
子页面js,子页面可以直接获取变量,进行数据更新
```javascript
console.log(testVal)
另外,(如果有服务端,可直接使用load()传参,返回页面)