使用rails3 javascript jQuery的onChange事件
我有一个投票表,你也可以添加另一个答案,然后当你这样做时,只有投票按钮应该出现 编辑2 在我的视图/index.html.erb中,我有:使用rails3 javascript jQuery的onChange事件,javascript,jquery,ruby-on-rails-3,onchange,Javascript,Jquery,Ruby On Rails 3,Onchange,我有一个投票表,你也可以添加另一个答案,然后当你这样做时,只有投票按钮应该出现 编辑2 在我的视图/index.html.erb中,我有: <table> <% @questions.each do |question| %> <% for answer in question.answers %> <td>Other:</td> <td>
<table>
<% @questions.each do |question| %>
<% for answer in question.answers %>
<td>Other:</td>
<td>
<%= form_tag('/vote/new_answer', :method => "post") do %>
<%= hidden_field_tag('answer[question_id]', question.id) %>
<%= hidden_field_tag('answer[user_id]', current_user.id) %>
<div class="other_answer">
<%= text_field_tag('answer[content]') %>
</div>
</td>
<td>
<div class="other_answer_button", hidden='true'>
<%= submit_tag('Vote') %>
</div>
<% end %>
<% end %>
依然如此:
现在它工作了。。。但如果我在其中一个文本字段中输入一些文本,所有投票按钮都会出现。它应该只在具体答案上显示一票按钮
我是否应该为每个文本输入字段和投票按钮添加一个增量id
有人吗?
当做
Thijs实际上,js代码中还有一些其他东西需要修改:
$(function() {
$(".other_answer input").change(function() {
if ($.trim($(this).val()) == "") {
$("input", $(this).parents("td").next()).hide();
}
else {
$("input", $(this).parents("td").next()).hide();
}
});
});
解决方案非常依赖于标记,选择器可能无法正常工作,因为我没有经过测试,所以请尝试使用它,如果没有测试的话。在js中,将
onChange(function)
更改为change(function)
。不,什么都不做。。。无论如何谢谢你!您已经隐藏了submit按钮,但是您正在修改包含它的div(并且它没有隐藏的attr)。现在您正在违反html的规则,属性id是唯一标识元素的,不应该有具有相同id的元素!,所以第一件事是将id更改为类,假设您将id更改为类,将更新答案,但解决方案非常依赖于标记。您的意思是因为它是一个数组,(一个表),所以有多个元素具有相同的id。。。所以它应该是…等等?谢谢,但还是不起作用。。。textfield的调用方式是否有问题?是否应该正确?并且是:if($.trim($(“#其他_答案”).val()==“”)正确,因为现在如果字段为空则为真,并且仅当字段至少有一个字符时才应显示按钮。是!!这几乎是完美的。。。(我还切换了显示和隐藏)但现在它只在我离开输入字段时显示“投票”按钮(在我键入某些内容后),我必须单击输入字段以外的其他内容。。。那么如何在输入过程中更新它呢?我还把输入放在$(“#其他_答案_按钮输入”)后面,就像这样。只是现在-我有一系列问题-当我在tet字段中键入并走出该字段并再次单击时,所有投票按钮都会出现。。。查看编辑的问题它工作得非常好$(这个)。父母(“td”)。下一个()成功了!!现在我需要弄清楚如何在每次按键后检查…$(“.other_answer input”).keyup(function()
$(function() {
$(".other_answer input").change(function() {
if ($.trim($(this).val()) == "") {
$("input", $(this).parents("td").next()).hide();
}
else {
$("input", $(this).parents("td").next()).hide();
}
});
});