Javascript 多元素->;一个函数,而元素之间不共线
我在同一页的不同幻灯片上有多个SelectionTag。每张幻灯片都有一组selectiontag,我希望用户只选择1个selectiontag。我已经编写了实现这一点的代码,但我想知道是否还有其他方法。 所以,基本上我想要:Javascript 多元素->;一个函数,而元素之间不共线,javascript,arrays,function,velo,Javascript,Arrays,Function,Velo,我在同一页的不同幻灯片上有多个SelectionTag。每张幻灯片都有一组selectiontag,我希望用户只选择1个selectiontag。我已经编写了实现这一点的代码,但我想知道是否还有其他方法。 所以,基本上我想要: 幻灯片1 w。selectiontags1:选择1个selectiontag(共4个) 幻灯片2 w.selectiontags2:选择1个selectiontag 幻灯片3 w。selectiontags3:选择1个selectiontag 幻灯片4 w。Select
- 幻灯片1 w。selectiontags1:选择1个selectiontag(共4个)
- 幻灯片2 w.selectiontags2:选择1个selectiontag
- 幻灯片3 w。selectiontags3:选择1个selectiontag
- 幻灯片4 w。SelectionTags 4:选择1个selectiontag
var prevSelectedValue = null;
var prevSelectedValue2 = null;
var prevSelectedValue3 = null;
var prevSelectedValue4 = null;
$w.onReady(function () {
//TODO: write your page related code here...
let tags = $w('#selectionTags1');
if (tags.value.length === 1) {
prevSelectedValue = tags.value[0];
} else if (tags.value.length > 1) {
tags.value = [];
}
let tags2 = $w('#selectionTags2');
if (tags2.value.length === 1) {
prevSelectedValue2 = tags2.value[0];
} else if (tags2.value.length > 1) {
tags2.value = [];
}
let tags3 = $w('#selectionTags3');
if (tags3.value.length === 1) {
prevSelectedValue3 = tags3.value[0];
} else if (tags3.value.length > 1) {
tags3.value = [];
}
let tags4 = $w('#selectionTags4');
if (tags4.value.length === 1) {
prevSelectedValue4 = tags4.value[0];
} else if (tags4.value.length > 1) {
tags4.value = [];
}
});
export function selectionTags1_change(event) {
//Add your code for this event here:
if (!event.target.value || event.target.value.length === 0) {
event.target.value = [prevSelectedValue];
} else {
event.target.value = event.target.value.filter(x => x !== prevSelectedValue);
prevSelectedValue = event.target.value[0];
}
}
export function selectionTags2_change(event) {
//Add your code for this event here:
if (!event.target.value || event.target.value.length === 0) {
event.target.value = [prevSelectedValue2];
} else {
event.target.value = event.target.value.filter(x => x !== prevSelectedValue2);
prevSelectedValue2 = event.target.value[0];
}
}
export function selectionTags3_change(event) {
//Add your code for this event here:
if (!event.target.value || event.target.value.length === 0) {
event.target.value = [prevSelectedValue3];
} else {
event.target.value = event.target.value.filter(x => x !== prevSelectedValue3);
prevSelectedValue3 = event.target.value[0];
}
}
export function selectionTags4_change(event) {
//Add your code for this event here:
if (!event.target.value || event.target.value.length === 0) {
event.target.value = [prevSelectedValue4];
} else {
event.target.value = event.target.value.filter(x => x !== prevSelectedValue4);
prevSelectedValue4 = event.target.value[0];
}
}
只需几条注释就可以帮助清理代码:
- 最好使用
而不是event.target.value[event.target.value.length-1]
。由于我们的数组非常小,所以它不会对性能产生很大影响,但我们知道最近选择的项是数组中的最后一项,因此使用.filter()
是更有效的代码length-1
- 最好是操纵选择器而不是事件,因此我建议将
替换为event.target.value=event.target.value.filter…
。这也会使代码更可读,因为您知道哪个元素正在更新$w(“#selectionTags2')=event.target.value[…
- 如果您没有将任何内容预加载到
值数组中,我不确定onReady函数中的代码是否有必要(除非我缺少填充该选择值数组的步骤)$w(“#selectionTags”)