如何在 Meteor 中设置事件目标的文本和颜色?
How can I set the text and color of the event target in Meteor?
我正在像这样在 Meteor 模板中加载项目数组:
{{#each person}}
<tr>
<td><input type="checkbox" class="sendtextckbx" checked></td>
<td>{{per_firstname}}</td>
<td>{{per_lastname}}</td>
<td>{{per_streetaddr1}}</td>
<td>{{per_streetaddr2}}</td>
<td>{{per_placename}}</td>
<td>{{per_stateorprov}}</td>
<td>{{per_zipcode}}</td>
<td>{{per_emailaddr}}</td>
<td class="textnum">{{per_phone}}</td>
<td class="textmorph">Not sent</td>
<td>{{per_notes}}</td>
</tr>
{{/each}}
我想在点击时用 ID "textmorph" 更新 td。它开始包含文本 "Not sent" 但是当点击 td 时,我希望它循环显示其他文本字符串,并相应地改变颜色。
因为这个 td 有 1..N 个实例,我不能只通过 class 值分配给它,因为会有很多共享相同的 class(一个用于每个人)。
我想我可以通过evt.target.value获取当前值,但我不知道如何设置该值。这是我的"pseudocode"(也称为胡乱猜测):
Template.peopleGrid.events({
'click #btnTextChecked': function() {
alert('you clicked the btnTextChecked button');
},
'click #textmorph': function(evt) {
var currentText = evt.target.value;
alert(currentText);
if (currentText === 'Not sent') {
evt.target.value = 'Sent';
evt.target.color = amber;
}
else if (currentText === 'Sent') {
evt.target.value = 'Need Help';
evt.target.color = red;
}
else if (currentText === 'Not sent') {
evt.target.value = 'Are OK';
evt.target.color = green;
}
}
});
...但我不确定它是否接近应有的状态。事实上,当我测试它时,~
那么如何对选定的 tds 进行操作,更改文本和颜色?该应用程序使用上面的代码运行,但是当我单击 "Not sent" tds 时给我一个 "undefined" 警报。
你并不太远。在纯 javascript 中,您实际上是通过其 innerHTML
property. As for the color, you set it through style.color
获取和设置元素的内容。并在颜色名称周围使用引号!
因此:
Template.peopleGrid.events({
'click #btnTextChecked': function() {
alert('you clicked the btnTextChecked button');
},
'click #textmorph': function(evt) {
var clicked = evt.target;
var currentText = clicked.innerHTML;
alert(currentText);
if (currentText === 'Not sent') {
clicked.innerHTML = 'Sent';
clicked.style.color = 'amber';
}
else if (currentText === 'Sent') {
clicked.innerHTML = 'Need Help';
clicked.style.color = 'red';
}
else if (currentText === 'Need Help') {
clicked.innerHTML = 'Are OK';
clicked.style.color = 'green';
}
}
});
我正在像这样在 Meteor 模板中加载项目数组:
{{#each person}}
<tr>
<td><input type="checkbox" class="sendtextckbx" checked></td>
<td>{{per_firstname}}</td>
<td>{{per_lastname}}</td>
<td>{{per_streetaddr1}}</td>
<td>{{per_streetaddr2}}</td>
<td>{{per_placename}}</td>
<td>{{per_stateorprov}}</td>
<td>{{per_zipcode}}</td>
<td>{{per_emailaddr}}</td>
<td class="textnum">{{per_phone}}</td>
<td class="textmorph">Not sent</td>
<td>{{per_notes}}</td>
</tr>
{{/each}}
我想在点击时用 ID "textmorph" 更新 td。它开始包含文本 "Not sent" 但是当点击 td 时,我希望它循环显示其他文本字符串,并相应地改变颜色。
因为这个 td 有 1..N 个实例,我不能只通过 class 值分配给它,因为会有很多共享相同的 class(一个用于每个人)。
我想我可以通过evt.target.value获取当前值,但我不知道如何设置该值。这是我的"pseudocode"(也称为胡乱猜测):
Template.peopleGrid.events({
'click #btnTextChecked': function() {
alert('you clicked the btnTextChecked button');
},
'click #textmorph': function(evt) {
var currentText = evt.target.value;
alert(currentText);
if (currentText === 'Not sent') {
evt.target.value = 'Sent';
evt.target.color = amber;
}
else if (currentText === 'Sent') {
evt.target.value = 'Need Help';
evt.target.color = red;
}
else if (currentText === 'Not sent') {
evt.target.value = 'Are OK';
evt.target.color = green;
}
}
});
...但我不确定它是否接近应有的状态。事实上,当我测试它时,~
那么如何对选定的 tds 进行操作,更改文本和颜色?该应用程序使用上面的代码运行,但是当我单击 "Not sent" tds 时给我一个 "undefined" 警报。
你并不太远。在纯 javascript 中,您实际上是通过其 innerHTML
property. As for the color, you set it through style.color
获取和设置元素的内容。并在颜色名称周围使用引号!
因此:
Template.peopleGrid.events({
'click #btnTextChecked': function() {
alert('you clicked the btnTextChecked button');
},
'click #textmorph': function(evt) {
var clicked = evt.target;
var currentText = clicked.innerHTML;
alert(currentText);
if (currentText === 'Not sent') {
clicked.innerHTML = 'Sent';
clicked.style.color = 'amber';
}
else if (currentText === 'Sent') {
clicked.innerHTML = 'Need Help';
clicked.style.color = 'red';
}
else if (currentText === 'Need Help') {
clicked.innerHTML = 'Are OK';
clicked.style.color = 'green';
}
}
});