【发布时间】:2016-09-26 03:38:43
【问题描述】:
我有一个表格,其中包含每个问题的一些问题(通过 <select> 元素选择)和 cmets(在 <textarea> 元素中)。所有问题都是必需的,但我只想填写一定数量的 cmets 以便提交。我正在从 SQLite 中的表中生成评论和问题输入,所以我不能在任何地方硬编码require,因为它会在所有这些上。解决方案可以在 Javascript 代码或 Ruby ERB 中。
我有一个问题和评论计数器,我确信我可以以某种方式在解决方案中使用它。我对 Javascript 很陌生,不知道如何使它工作。
这是我实现此功能的尝试:
<table class="sortable">
<tr>
<th></th>
</tr>
<% data.each.with_index do |data,index|%>
<%if data[0] >= 6 && data[0] <= 20%>
<tr>
<td><%=data[1]%></td><td><select name="<%=index%>">
<option value=""></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
<option value="na">N/a</option>
</select>
<div class="accordion">Comment</div>
<div class="panel">
<textarea class="comments" name="comment<%=index%>" rows="4" cols="15"></textarea>
</div>
</td>
</tr>
<% end %>
<% end %>
</table>
$('select').change(function() {
// get all selects
var allSelects = $('select');
// set values count by type
//var yes = 0;
//var no = 0;
// var na = 0;
var total = 0;
// for each select increase count
$.each(allSelects, function(i, s) {
// increase count
if($(s).val() == 'Yes' ) { total++; }
if($(s).val() == 'No') { total++; }
if($(s).val() == 'na') { total++; }
});
// update count values summary
$('.cnt-yes').text(yes);
$('.cnt-no').text(no);
$('.cnt-na').text(na);
$('.cnt-total').text(total);
if (total > 19) {
alert('You have completed this ......')
};
var commentstotal = 0;
$('select').change(function() {
$('.comment-total').text(commentstotal);
});
$(".comments").on("blur", function(){
$(this).val() ? commentstotal++ : commentstotal--;
$('.comment-total').text(commentstotal);
})
【问题讨论】:
-
我会尝试改写您的描述,因为它很难理解...话虽如此,我会尝试解决方案。获取对所有可能“需要”的输入的引用,并确保其中至少有 X 个满足您对“正在填写”的要求。
-
@BradJanke 是的,这就是我试图找出最好的方法
-
您可以通过将事件附加到您关心的所有输入然后确定它们是否已在处理程序中充分填写来保持哪些输入满足您的要求的状态。或者,您可以等待他们点击提交,然后以这种方式循环输入。就个人而言,我更喜欢后者,因为它不那么令人头疼,而且摔跤比赛有时会很费力。
标签: javascript jquery html ruby erb