在Rails应用中使用Javascript显示和隐藏
show and hide using Javascript in a Rails app
我是JavaScript和rails的新手。我正在建立一个网站在rails上的ruby和我试图在视图中使用JavaScript。我需要隐藏和显示一个表的一些元素,我有一些脚本任务下来,它只适用于表的第一行。有更好的方法吗?谢谢你的帮助。我需要每个按钮显示或隐藏表
中的相应元素。application.html
<!DOCTYPE html>
<script>
function changeColor(newColor) {
document.getElementById("para1").style.display = "none"
document.getElementById("para2").style.display = "none"
document.getElementById("para3").style.display = "none"
document.getElementById("para4").style.display = "block"
document.getElementById("para5").style.display = "none"
}
function show(newColor) {
document.getElementById("para1").style.display = "block"
document.getElementById("para2").style.display = "block"
document.getElementById("para3").style.display = "block"
document.getElementById("para4").style.display = "none"
document.getElementById("para5").style.display = "block"
}
</script>
<html>
<head>
<title>VincentricData</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag "defaults", media: "all", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
index . html
<h1>Listing vehicles</h1>
<table>
<thead>
<tr>
<th>Year</th>
<th>Make</th>
<th>Model</th>
<th>Msrp</th>
<th>Rating</th>
<th>Total operating costs</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @vehicles.each do |vehicle| %>
<tr>
<td><%= vehicle.year %></td>
<td><%= vehicle.make %></td>
<td><%= vehicle.model %></td>
<td><div id="para1" ><%= vehicle.msrp %></div></td>
<td><div id="para2" ><%= vehicle.rating %></div></td>
<td><div id="para3" ><%= vehicle.total_operating_costs %></div></td>
<td><div id="para4" ><button onclick="show('#00FFFF');">Show</button></div></td>
<td><div id="para5" ><button onclick="changeColor('#00FFFF');">hide</button></div></td>
<td><%= link_to 'Edit', edit_vehicle_path(vehicle) %></td>
<td><%= link_to 'Destroy', vehicle, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Vehicle', new_vehicle_path %>
首先,如果行处于循环中,则不能为元素提供硬编码ID,因为会有多个具有相同ID的HTML元素,这绝对是非常糟糕的。给你的元素一个类,你可以想复制多少次就复制多少次。
第二,您可以(如果可能的话,也许应该)使用jQuery来完成这类事情。它真的,真的比纯javascript更直观,更容易。
<script src='/somewhere/jquery.min.js'></script>
<script>
(function ($) {
// Here you are sure that jQuery is included in your HTML page
$(function () {
// Now the DOM is fully loaded, you can use some javascript without problem
// Listen a click on each ".para4" element : (class='para4')
$('.para4').on('click', function (event) {
// Get the parent <tr> element
var $tr = $(this).closest('tr');
// On this parent <tr>, display all .para elements
$tr.find('.para').show();
/*
This is equivalent to :
$tr.find('.para').css('display', 'block');
*/
// Then hide the .para4 one only.
$tr.find('.para4').hide();
/*
This is equivalent to :
$tr.find('.para4').css('display', 'none');
*/
});
// Listen a click on each ".para5" element : (class='para5')
$('.para5').on('click', function (event) {
// Get the parent <tr> element
var $tr = $(this).closest('tr');
// On this parent <tr>, hide all .para elements
$tr.find('.para').hide();
/*
This is equivalent to :
$tr.find('.para').css('display', 'none');
*/
// Then display the .para4 one only.
$tr.find('.para4').show();
/*
This is equivalent to :
$tr.find('.para4').css('display', 'block');
*/
});
});
})(window.jQuery);
</script>
小提琴:http://jsfiddle.net/9uRps/
如果没有jQuery,你必须使用循环和事件监听器:// Find all your .para4 elements
var para4Array = document.getElementsByClassName('para4');
var para4Length = para4Array.length;
// For each of them, listen for a click event
while (para4Length--) {
para4Array[para4Length].addEventListener('click', function (event) {
// Find the parent's <tr>
var tr = this.parentNode.parentNode;
// Display all .para children of this <tr>
tr.querySelectorAll('.para').style.display = 'block';
// Then hide the .para4 one
tr.querySelectorAll('.para4').style.display = 'none';
});
}
// Find all your .para5 elements
var para5Array = document.getElementsByClassName('para5');
var para5Length = para5Array.length;
// For each of them, listen for a click event
while (para5Length--) {
para5Array[para5Length].addEventListener('click', function (event) {
// Find the parent's <tr>
var tr = this.parentNode.parentNode;
// Hide all .para children of this <tr>
tr.querySelectorAll('.para').style.display = 'none';
// Then display the .para4 one
tr.querySelectorAll('.para4').style.display = 'block';
});
}
相关文章:
- PHP Javascript显示/隐藏按钮不工作
- 通过javascript显示和更改文本
- 是否可以用JavaScript显示等效的文件夹对话框
- 如何使用javascript显示图像
- BMI计算器以Javascript显示结果
- 单击“JavaScript显示变量”
- Javascript:显示带有复选框值的图像
- 通过ID JavaScript显示随机背景图像
- 无法在qualtrics上使用javascript显示背景图像
- 日期选择器无法使用javascript显示
- javascript 显示空白灰色层
- 页面加载后通过javascript显示图像
- 使用JavaScript显示鼠标的x和y位置
- 用javascript显示html表
- 使用 JavaScript 显示 Laravel's Variable
- javascript显示地理位置
- 搜索XML文件并使用javascript显示结果
- 使用javascript显示文件名上传
- 使用javascript显示隐藏的HTML元素
- 使用jquery和javascript显示PHP中的变量