下拉框选框设置了change监听, 前一个相邻的input元素无法获取值

qwr124 2021-05-20 01:58:14
油猴鼠标拖拽脚本,新安装后打开设置界面,搜索引擎文本框和下拉框设置了监听,对下面的1,如何设置监听,直接改新增的功能下拉选框input也可以变化
1 直接改新增加的功能,前一个元素input没有变化
2 默认设置的功能,input可以同步变化
3 改了默认的之后,再修改新增的,input可以变化

Alt+Y进入设置界面
测试脚本代码
https://greasyfork.org/zh-CN/scripts/426697-%E6%B5%8B%E8%AF%95%E9%BC%A0%E6%A0%87%E6%8B%96%E6%8B%BD/code

设置界面

function arg2html(argument, type, trk){
let html ="",
argu, i,rand, trackTxt, name,
argValue = [],
agrDetail = [],
description,
selectName;
if(typeof argument === "object")
argu = argument;
else
argu = JSON.parse(argument);
trackTxt = trk || '';
name = argu.name;

html += `<span>${name}</span><span name="alias">${argu.alias ? argu.alias : local[type][name][cfg.language]}</span><b style="visibility:${argu.arg.length ? "visible" : "hidden"};" name="toggleArgument">↑</b><input type="text" name="${name}" value="${trackTxt}" data-mark="${type}" readonly="readonly"><br/><div class="fnArgument">`;
if(argu.arg.length > 0){
argValue = trackTxt ? argu.arg : [];
agrDetail = fnLocal.arg[name].arg;
description = fnLocal.arg[name].description[cfg.language];

for(i in agrDetail){
rand = Math.floor(Math.random()*1000);
switch (agrDetail[i].slice(0,5)) {
case 'input':
html += '<span><input type="text"><i></i></span>';
break;
case 'selec':
selectName = agrDetail[i].split(':').pop();
html += `<span><input type="text" value=${argValue[i] || ''}><select name="fnSelect" onchange="console.log(this.options[this.options.selectedIndex].value);">`;
for (let k in options[selectName]){
html += `<option value=${options[selectName][k]} ${sel(argValue[i], options[selectName][k])}>${k}</option>`;
}
html += '</select></span>';
break;
default:
html = `<span style="visibility:hidden;"></span>`;
break;
}
}
}
return html + "</div>";
}


更新功能函数中添加的监听


function updateConfigUi(e){
let name = attr(e.target, 'name');
switch (name) {
default:
if(name === "alias") {
updateFns(e.target.parentElement);
} else if(name === "fnCheckbox" || name==="fnSelect"){
window.addEventListener('change', formChange, false);
}
return;
}
storage.set('cfg', cfg);
}
function formChange(event){
if(event.target.tagName === 'SELECT'){
//event.target.previousElementSibling.value = event.target.value;
if( event.target.previousElementSibling !== null) {//前input元素显示值 判断前元素
event.target.previousElementSibling.value = event.target.value;
}
updateFns(event.target.parentElement.parentElement.parentElement);
}
}

...全文
13424 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
请求脚本已删除。。
  • 打赏
  • 举报
回复
三害 2021-05-27
这不像是个前端开发写的代码
  • 打赏
  • 举报
回复
丰云 2021-05-25
你这代码看起来很吃力啊。。。。。一点简单的功能,为什么要用这么复杂的逻辑来实现????
  • 打赏
  • 举报
回复
发帖
JavaScript
加入

8.6w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
申请成为版主
帖子事件
创建了帖子
2021-05-20 01:58
社区公告
暂无公告