2016-02-26 89 views
-1

我有一个问题,我的代码...实际上,我发现了一个代码,我尝试了它的工作(http://www.srccodes.com/p/article/40/determine-click-position-row-column-number-onclick-table-cell),但当我尝试创建一个函数的表,它不工作,我找不到原因... 。 请帮忙 !!这里是代码: 谢谢! 如何通过单击表格来检测单元格?

$(document).ready(function() 
 
{ 
 
//my function to create my table 
 
$("#btn-create-table").click(function create_new_table(){ 
 

 
    var nb_columns = document.getElementById("columns").value; 
 
    var nb_rows = document.getElementById("rows").value; 
 

 
    var table=document.createElement("table"); 
 
    $(table).attr("element", "table"); 
 
    $(table).append(thead=document.createElement("thead")); 
 

 
    $(thead).append(line=document.createElement("tr")); 
 

 
    for (var j=0; j<nb_columns;j++) { 
 
     $(line).append(document.createElement("th")); 
 
    }; 
 

 
    $(table).append(tbody=document.createElement("tbody")); 
 

 
    for(var j=0;j<nb_rows;j++){ 
 

 
    $(tbody).append(line=document.createElement("tr")) 
 

 
     for (var k=0; k<nb_columns;k++) { 
 
      $(line).append(td=document.createElement("td")); 
 
    }; 
 
    };   
 

 
$("#content").append(table); 
 
}); 
 

 
//the function I've found to detect rows and columns on mouse click 
 
$("[element = 'table'] td").click(function() {  
 
     var column_num = parseInt($(this).index()); 
 
     var row_num = parseInt($(this).parent().index());  
 
    
 
     $("#result").html("Row_num =" + row_num + " , Rolumn_num ="+ column_num); 
 
    }); 
 

 

 
});
table { 
 

 
    border-collapse: collapse; 
 
    width: 100%; 
 
    height: 60px; 
 
} 
 

 
table td { 
 
    border-width: 1px; 
 
    border-style: solid; 
 
    border-color: grey; 
 
    height: 60px; 
 
    text-align: center; 
 
} 
 

 
table thead { 
 
    width: 100%; 
 
    height: 60px; 
 
    background-color: rgba(0, 0, 255, 0.2); 
 
} 
 

 
table th { 
 
    border-width: 1px; 
 
    border-style: solid; 
 
    border-color: grey; 
 
    height: 60px; 
 
    text-align: center; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div> 
 
    <label for="columns"> 
 
     <input id="columns" type="number" min="1" placeholder="columns"></input> 
 
    </label> 
 
    <br /> 
 
    <label for="rows" class=""> 
 
     <input id="rows" type="number" min="1" placeholder="rows"></input> 
 
    </label> 
 
    <br /> 
 
    <button id="btn-create-table">create</button> 
 
    
 
<div id="content" contentEditable="true"> 
 
    <div id="result"></div> 
 
    <table element="table"> 
 
    <thead> 
 
     <tr> 
 
      <th>1</th> 
 
      <th>2</th> 
 
      <th>3</th> 
 
      <th>4</th> 
 
      <th>5</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
    <!--1st ROW--> 
 
    <tr> 
 
     <td>row 1, col 1</td> 
 
     <td>row 1, col 2</td> 
 
     <td>row 1, col 3</td> 
 
     <td>row 1, col 4</td> 
 
     <td>row 1, col 5</td> 
 
    </tr> 
 
    
 
    <!--2nd ROW--> 
 
    <tr> 
 
     <td>row 2, col 1</td> 
 
     <td>row 2, col 2</td> 
 
     <td>row 2, col 3</td> 
 
     <td>row 2, col 4</td> 
 
     <td>row 2, col 5</td> 
 
    </tr> 
 
    
 
    <!--3rd ROW--> 
 
    <tr> 
 
     <td>row 3, col 1</td> 
 
     <td>row 3, col 2</td> 
 
     <td>row 3, col 3</td> 
 
     <td>row 3, col 4</td> 
 
     <td>row 3, col 5</td> 
 
    </tr> 
 
    
 
    <!--4th ROW--> 
 
    <tr> 
 
     <td>row 4, col 1</td> 
 
     <td>row 4, col 2</td> 
 
     <td>row 4, col 3</td> 
 
     <td>row 4, col 4</td> 
 
     <td>row 4, col 5</td> 
 
    </tr> 
 
    
 
    <!--5th ROW--> 
 
    <tr> 
 
     <td>row 5, col 1</td> 
 
     <td>row 5, col 2</td> 
 
     <td>row 5, col 3</td> 
 
     <td>row 5, col 4</td> 
 
     <td>row 5, col 5</td> 
 
    </tr> 
 
</tbody> 
 
</table> 
 
    
 
</div>

+0

你期望发生什么? – guradio

+0

什么不行? – Rayon

+0

检测单元格的功能只在我手动创建表格时起作用我的意思是作为在div中显示的表格,但是当我使用函数“create_new_table”创建表格时,点击单元格不起作用...所以我不能工作知道用户点击哪个单元格... – Birdy

回答

0

既然你正在创建的动态表,你应该使用.on代替.click deligate处理程序..查收以下拨弄我创建https://jsfiddle.net/n7rxjoft/

修改的jQuery

$(document).ready(function() 
{ 
//my function to create my table 
$("#btn-create-table").click(function create_new_table(){ 

    var nb_columns = document.getElementById("columns").value; 
    var nb_rows = document.getElementById("rows").value; 

    var table=document.createElement("table"); 
    $(table).attr("element", "table"); 
    $(table).append(thead=document.createElement("thead")); 

    $(thead).append(line=document.createElement("tr")); 

    for (var j=0; j<nb_columns;j++) { 
     $(line).append(document.createElement("th")); 
    }; 

    $(table).append(tbody=document.createElement("tbody")); 

    for(var j=0;j<nb_rows;j++){ 

    $(tbody).append(line=document.createElement("tr")) 

     for (var k=0; k<nb_columns;k++) { 
      $(line).append(td=document.createElement("td")); 
    }; 
    };   

$("#content").append(table); 
}); 

//the function I've found to detect rows and columns on mouse click 
$(document).on('click','table td', function() {  
     var column_num = parseInt($(this).index()); 
     var row_num = parseInt($(this).parent().index());  

     $("#result").html("Row_num =" + row_num + " , Rolumn_num ="+ column_num); 
    }); 


}); 
+0

谢谢,它的工作原理! – Birdy

+0

高兴地帮助:) – RRR

0

据我了解,你是动态创建表元素。这就是为什么你单击事件不与控件关联。

试试下面一个。

$(document).delegate("[element = 'table'] td",'click',function() {  
      var column_num = parseInt($(this).index()); 
      var row_num = parseInt($(this).parent().index());  

      $("#result").html("Row_num =" + row_num + " , Rolumn_num ="+ column_num); 
     }); 
+0

birdy正在使用jQuery版本的2+代理被取代:)... * 从jQuery 1.7开始,.delegate()已被.on()方法取代。然而,对于较早的版本,它仍然是使用事件委派的最有效手段。 .on()方法中有关事件绑定和委派的更多信息。一般来说,这些是两种方法的等效模板:'* – RRR

0

您必须使用$(document).on('event_name',function(){...})方法在HTML页面上动态创建的元素上绑定事件。

$(document).on('click',"table[element="table"] td",function() { 
    var col_pos = parseInt($(this).index())+1; 
    var row_pos = parseInt($(this).parent().index())+1; 
    console.log("Row: " + row_pos + " , Column:"+ col_pos); 
}); 
相关问题