Javascript 函数在v-for循环的第一个选择中推送所有数据
想调用myv-for..中的函数for all循环,但我的函数仅在第一次选择时推送数据Javascript 函数在v-for循环的第一个选择中推送所有数据,javascript,function,vue.js,Javascript,Function,Vue.js,想调用myv-for..中的函数for all循环,但我的函数仅在第一次选择时推送数据 <td style="min-width: 75px" v-for="date of dates" v-bind:key="date.id"> <!-- Boucle for sur la date pour chaque utilisateur --> <form v-if="weekEnd(date)"> <select v-bin
<td style="min-width: 75px" v-for="date of dates" v-bind:key="date.id">
<!-- Boucle for sur la date pour chaque utilisateur -->
<form v-if="weekEnd(date)">
<select v-bind:placeholder="generateTasksAM(user.id, date)" v-on:change="deleteTaskAM(user.id,date)" id="matin" size="1">
</select>
</form>
</td>
generateTasksAM:函数(用户、日期){
对于(var i=0;i if(this.assignments[i].heured,但我可以建议您更改代码的结构,而无需使用函数来构建选择
实现它的一种方法是使用模板复制您在函数中所做的操作
这只是一个想法,不是工作代码
模板:
{{option}}
脚本:
方法:{
检查日期(日期、开始){
var date1=新日期(日期);
var date2=新日期(开始);
返回日期1.getFullYear()==date2.getFullYear()&&date1.getMonth()==date2.getMonth()&&date1.getDate()==date2.getDate()
}
}
希望它对您有所帮助。您的问题是,在按下选项时,您总是会得到相同的选择
var select = document.getElementById("matin");
解决方案
为选择器分配不同的ID
var-select=document.getElementById('matin-'+SOME_ID);
所需的修改
在模板循环中:
在模板中选择:
在generateTasksAM功能中:
generateTasksAM: function(user, date, index) {
for (var i = 0; i < this.assignments.length; i++) {
var date1 = new Date(date);
var date2 = new Date(this.assignments[i].start);
if (user === this.assignments[i].User.id) {
if (
date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() === date2.getDate()
) {
if (this.assignments[i].heuredebut <= "12:00:00") {
for (var j = 0; j < this.options.length; j++) {
if (this.assignments[i].Task.Project.name === this.options[j]) {
var select = document.getElementById("matin-" + index);
select.options[j] = new Option(this.options[j],this.options[j],true,true);
} else {
var select = document.getElementById("matin-" + index);
select.options[j] = new Option(this.options[j],this.options[j],false,false);
generateTasksAM:函数(用户、日期、索引){
对于(var i=0;i if(this.assignments[i].h),但您使用的是getElementById(“matin”)
在generateTasksAM
方法中。因此它会从v-for返回第一个元素。这就是为什么它只影响第一个元素。顺便说一句,在vuejs中直接接触dom是一种不好的做法。换句话说,您在serveal元素上使用相同的id,而只获取第一个元素很好!但是当选项为“”(空)时select不是createword,它应该是。如果条件匹配,则应呈现options
数组的每个元素,即使是emptyok。因此,如果没有条件匹配,我希望使用相同的select,但使用“”在Selected中,您可以添加另一个带有v-else
指令的模板标记,并在其中添加一个不带v-for
的选项标记。我希望当日期没有任务但他不工作时,空值为call,但我不能同时在两个位置增加一些ID…我更新了我的答案,并对此进行了必要的修改解决方案
generateTasksAM: function(user, date, index) {
for (var i = 0; i < this.assignments.length; i++) {
var date1 = new Date(date);
var date2 = new Date(this.assignments[i].start);
if (user === this.assignments[i].User.id) {
if (
date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() === date2.getDate()
) {
if (this.assignments[i].heuredebut <= "12:00:00") {
for (var j = 0; j < this.options.length; j++) {
if (this.assignments[i].Task.Project.name === this.options[j]) {
var select = document.getElementById("matin-" + index);
select.options[j] = new Option(this.options[j],this.options[j],true,true);
} else {
var select = document.getElementById("matin-" + index);
select.options[j] = new Option(this.options[j],this.options[j],false,false);