Javascript 在下拉列表jquery中首先选择
我知道Meteor支持事件,但我不确定在第一次选择某个项目时是否有下拉单击事件。理想情况下,这将只在第一次选择下拉列表中的项目时运行代码,而不是在以后的任何时间 以下是html代码:Javascript 在下拉列表jquery中首先选择,javascript,meteor,html-select,Javascript,Meteor,Html Select,我知道Meteor支持事件,但我不确定在第一次选择某个项目时是否有下拉单击事件。理想情况下,这将只在第一次选择下拉列表中的项目时运行代码,而不是在以后的任何时间 以下是html代码: <select id="module-select" class="form-control"> <option disabled="disabled" selected="selected">Select Assessment</option&
<select id="module-select" class="form-control">
<option disabled="disabled" selected="selected">Select Assessment</option>
{{#each modules}}
<option value="{{this.name}}">{{this.name}}</option>
{{/each}}
</select>
理想情况下,这将只在第一次选择下拉列表中的项目时运行代码,而不是在以后的任何时间
在您的情况下,不需要特殊的魔法来解决这个问题。基本上,您需要一个允许只运行一次方法的结构
此结构的输入是模块列表。检查模块是否已加载的缓存是对象。考虑下面的模块名称列表和一个空对象:
Template.yourTemplate.onCreatedfunction{
const instance=this;
instance.state=新的ReactiveDict;
state.set'modules',['a','b','c'];
set'loaded',{};
};
您可以加载模块,然后向已加载模块的对象添加条目:
//模板函数之外
函数LoadOnMemodule,templateInstance{
const loaded=templateInstance.state.get'loaded';
//如果已加载,则返回
如果加载[模块]返回;
//else加载模块并设置为已加载
Session.setAssessment\u名称、模块名称
加载的[模块]=真;
state.set'loaded',loaded;
}
Template.yourTemplate.events{
更改模块选择:functionevent,template{
变量模块名称=$event.currentTarget.val
loadOncemodule_名称、模板;
}
};
现在只需加载一次就可以解决问题,但可能无法解决问题,因为您的选择列表仍然包含要选择的元素
因此,如果要删除选项中的元素,还可以从模块数组中删除该元素。那么它就不再是可选择的了
函数LoadOnMemodule,templateInstance{
const loaded=templateInstance.state.get'loaded';
const modules=templateInstance.state.get'modules';
//如果已加载,则返回
如果加载[模块]返回;
//else加载模块并设置为已加载
Session.setAssessment\u名称、模块名称
加载的[模块]=真;
modules.拼接modules.indexOfmodule,1;
state.set'loaded',loaded;
state.set'modules',modules;
}
关于安全性的一般注意事项:如果客户端想要加载模块,这不会阻止客户端加载模块。这只是UI/UX功能,但如果需要,不会阻止某人加载模块。如果不想将会话变量“Assessment\u name”设置为相同的值两次,我认为这是为了避免此设置的其他副作用。因此,我假设您只想在变量当前值的情况下防止再次设置,因此如果会话变量设置为下拉列表中另一项的值,您不会介意它是否更改,即使它更改为的项在过去某个时间被选中。因此,如果这些假设是正确的,那么只需检查会话变量的值就足以防止设置相同的值:
"change #module-select": function(event, template){
var module_name = $(event.currentTarget).val()
console.log("assessment: ", module_name)
if (Session.get("Assessment_name") !== module_name) {
Session.set("Assessment_name", module_name)
}
}
"change #module-select": function(event, template){
var module_name = $(event.currentTarget).val()
console.log("assessment: ", module_name)
if (Session.get("Assessment_name") !== module_name) {
Session.set("Assessment_name", module_name)
}
}