Javascript 如何仅在前一行输入不为空的情况下单击新表行?
只有当先前的一行输入不为空时,如何在单击时获取新行 *“一行以前的输入”-我有一行空白输入,只要我点击它,就会创建下一行,但我知道第一行将是空的或部分满的,所以我不想创建新行 以下代码是我目前掌握的:Javascript 如何仅在前一行输入不为空的情况下单击新表行?,javascript,Javascript,只有当先前的一行输入不为空时,如何在单击时获取新行 *“一行以前的输入”-我有一行空白输入,只要我点击它,就会创建下一行,但我知道第一行将是空的或部分满的,所以我不想创建新行 以下代码是我目前掌握的: -加载时创建的第一行 -单击输入时,将创建新行 -checkempty函数已准备好使用 <!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1
-加载时创建的第一行
-单击输入时,将创建新行
-checkempty函数已准备好使用
<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GE Watch</title>
<style type="text/css">
input{width:76px;height:20px;padding:0;margin:0;display:block;float:left}table{padding:0;margin:0;border:thin dotted #333}tr{padding:0;margin:0}td{width:80px;height:20px;padding:0;margin:0;text-align:center}
</style>
<script language="javascript" type="text/javascript">
function addRow(id){
var tbody = document.getElementById
(id).getElementsByTagName("tbody")[0];
var row = document.createElement("tr")
var RowCount = 11;
for (i = 1; i <= RowCount; ++i) {
var td = document.createElement("td")
td.appendChild(document.createElement("input"))
td.id = "td" + i;
td.setAttribute("onclick", "javascript:addRow('myTable');")
row.appendChild(td);
}
tbody.appendChild(row);
}
function checkempty() {
checking = document.getElementById(cellId);
if (checking.value == "" || " " || null) {
return false;
} else {
return true;
}
}
</script>
</head>
<body onLoad = "javascript:addRow('myTable')">
<a href="javascript:addRow('myTable')">Add row</a>
<table id="myTable">
<tr>
<td>#</td>
<td>CHECK</td>
<td>DATE</td>
<td>HOUR</td>
<td>MIN</td>
<td>MARKET</td>
<td>MAX</td>
<td>BUY</td>
<td>SELL</td>
<td>PROFIT</td>
<td>FLIP TIME</td>
</tr>
</table>
</body>
</html>
通用手表
输入{宽度:76px;高度:20px;填充:0;边距:0;显示:块;浮点:左}表{填充:0;边距:0;边框:细点#333}tr{填充:0;边距:0}td{宽度:80px;高度:20px;填充:0;边距:0;文本对齐:中心}
函数addRow(id){
var tbody=document.getElementById
(id).getElementsByTagName(“tbody”)[0];
var行=document.createElement(“tr”)
var行数=11;
对于(i=1;i首先,您的checkempty
函数需要接受一个参数,例如:checkempty(cellId)
其次,您的addrow
函数应该为输入元素提供ID和名称,否则您将无法以足够的方式处理表单。还要为行提供ID或数据属性
第三,如果您使用addrow
函数来执行此操作,则只需获取最后一行,从数据属性中提取行id,并使用该id遍历该行中的所有输入元素。如果至少有一个输入元素的值不为null,则您的脚本可以添加新行。添加Paul所说的内容—您有许多问题
首先,你面临的问题
1) onload=
永远不要设置onload事件,而是添加到它。读取
2) 设置属性vs单击
button_element.setAttribute('onclick','doSomething();'); // for FF
button_element.onclick = function() {doSomething();}; // for IE
3) 将onclick设置为行而不是每个单元格
对于解决方案:
步骤如下:
1) 用户单击一行,获取上一行或所有行,但不确定您想要什么
if(elem.previousSibling != null){
while (elem.previousSibling.tagName == 'TR') {
...
}
}
2) 检查该行中的每个单元格
if(elem.previousSibling != null){
while (elem.previousSibling.tagName == 'TR') {
var cells = elem.previousSibling.childNodes;
for(i = 0 ; i < cells.length; i++){
if(!checkIfEmpty(cells[i])){
canInsertRow = true;
}
}
elem = elem.previousSibling;
}
}
if(elem.previousSibling!=null){
而(elem.previousSibling.tagName=='TR'){
var cells=elem.previousSibling.childNodes;
对于(i=0;i
这是一个不完整的JSFIDLE..我只是用它来处理您的代码--不是用writeCode模式来编写所有代码,但是您应该理解这个概念这里是一个使用jquery的快速示例(在ff 11和chrome中快速测试):
通用手表
身体{
填充:0px;
边际:0px;
字体大小:11px;
颜色:#333;
字体系列:Arial;
背景:#efef;
文本对齐:居中;
}
#内容{
宽度:600px;
填充:15px;
保证金:20px自动;
背景:#fff;
边框:实心1px#ddd;
文本对齐:左对齐;
}
桌子{
宽度:100%;
填充:0;
保证金:0;
边框:实心1px#ddd;
边界塌陷:塌陷;
}
tr{
填充:0;
保证金:0
}
运输署{
宽度:80px;
高度:20px;
填充:4px;
保证金:0;
边框:实心1px#ebebebeb;
文本对齐:居中
}
表#myTable td输入[type=“text”]{
填充:2;
保证金:0;
显示:块;
边框:实心1px#ddd;
}
表#myTable td输入[type=“text”]。不完整{
边框:实心1px#ff0000;
}
th{
字体大小:11px;
边框:实心1px#ddd;
背景:#efef;
文本对齐:居中;
颜色:#999;
}
#阿德罗{
填充:3倍;
宽度:80px;
文本对齐:居中;
文字装饰:无;
背景:#0000ff;
颜色:#fff;
利润率:10px 0px;
字体大小:粗体;
字体大小:10px;
显示:内联块;
}
#信息{
颜色:#DB1925;
填充:4px;
字体大小:10px;
字体大小:粗体;
边框:虚线1px#DB1925;
背景:#FFBABA;
显示:内联块;
不透明度:0;
}
请填写红色的输入
检查
日期
时辰
var rowTemplateHTML='';
$(文档).ready(函数(){
var$tableBody=$(“#myTable”),
$addRowButton=$(“#addRow”),
$message=$(“#message”);
$addRowButton.单击(函数(事件){
event.preventDefault();
$('.complete').removeClass('complete');
addRow();
});
函数addRow(){
if(上一行notempty()){
$message.css(“不透明度”、“0”);
$tableBody.append(rowTemplateHTML);
}否则{
//警报(“请填写前一行”);
$message.animate({
“不透明度”:“1”
}, 50);
}
}
函数PreviousRowNoteEmpty(){
var rowComplete=true;
$tableBody.find('tr.dataRow:last').find('input[type=“text”]”)。每个函数(索引,输入){
变量$input=$(输入);
如果($input.val()==“”){
$input.addClass(‘不完整’);
rowComplete=false;
}
});
返回完整的行;
}
函数addFirstRow(){
$tableBody.append(rowTemplateHTML);
}
addFirstRow();
})
bump“一行以前的输入”是指表格中的任何一行?还是同一行所有输入?还是所有行所有输入?“一行以前的输入”-我有一行空白输入,只要我单击它,就会创建下一行,但我知道第一行将是空的或部分满的,所以我不想创建新行。感谢您的回答,只要croteau提供了部分工作示例,您的回答也会有帮助。