Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅在前一行输入不为空的情况下单击新表行?_Javascript - Fatal编程技术网

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提供了部分工作示例,您的回答也会有帮助。