2009-12-01 96 views
3

我使用TR的rowIndex屬性,但它不工作。請讓我知道如果我在這裏做錯了什麼。Javascript rowIndex方法不起作用

function myMethod(){ 
       alert (this.parent.rowIndex ); // parentNode is also used 
      } 

的Html

<table border="1"> 
      <tr> 
       <td onclick="myMethod();">1.1</td> 
       <td>1.2</td> 
       <td>1.3</td> 
      </tr> 
      <tr> 
       <td onclick="myMethod();">2.1</td> 
       <td>2.2</td> 
       <td>2.3</td> 
      </tr> 
      <tr> 
       <td onclick="myMethod();">3.1</td> 
       <td>3.2</td> 
       <td>3.3</td> 
      </tr> 
      <tr> 
       <td onclick="myMethod();">4.1</td> 
       <td>4.2</td> 
       <td>4.3</td> 
      </tr> 
     </table> 

回答

8

的 「本」 在this.parent.rowIndex是窗口。不是td元素。 嘗試

<td onclick="myMethod(this);">1.1</td> 

function myMethod(obj){ alert (obj.parentNode.rowIndex);} 
+2

我正在寫一個答案,但我喜歡這個不夠好等等我不會打擾。不過,通過進一步的解釋,我會指出''this''關鍵字指的是它出現的上下文,而不是函數被調用的上下文。 – 2009-12-01 06:18:36

+0

'父'不存在,它應該是'parentNode' – 2009-12-01 06:23:08

+0

對不起,剪切N粘貼錯誤,更正。 – 2009-12-01 06:25:37

2

這樣怎麼樣?

<td onclick="myMethod(this);">1.1</td> 

...

function myMethod(obj){ 
    alert (obj.parentNode.rowIndex ); // parentNode is also used 
} 
+0

完美!我現在使用這個 – 2009-12-01 06:42:47

+0

@ Pranav-BitWiser,當然,這個問題和答案不是關於返回值,而是'this'的範圍。 – YOU 2017-03-09 14:02:33

0
<html> 
    <head></head> 
    <body> 
    <script> 
    function myMethod(e){ 
          alert('am in'); 
          alert(e.parent); 
          alert (e.innerHTML); // parentNode is also used 
        } 
    </script> 


    <table border="1"> 
        <tr> 
          <td onclick="myMethod(this);">1.1</td> 
          <td>1.2</td> 
          <td>1.3</td> 
        </tr> 
        <tr> 
          <td onclick="myMethod();">2.1</td> 
          <td>2.2</td> 
          <td>2.3</td> 
        </tr> 
        <tr> 
          <td onclick="myMethod();">3.1</td> 
          <td>3.2</td> 
          <td>3.3</td> 
        </tr> 
        <tr> 
          <td onclick="myMethod();">4.1</td> 
          <td>4.2</td> 
          <td>4.3</td> 
        </tr> 
      </table> 
      </body> 
      </html> 

e的值,它是基本上與TD對象不具有屬性作爲母體,因此它是未來爲未定義。

我認爲你需要通過getElementById搜索tr,並給TD一個unqiue ID,以便td可以提供其相應的tr id,然後就可以獲得該TR。

http://www.w3schools.com/TAGS/tag_td.asp

+0

爲什麼它被低估?它不起作用? – 2009-12-01 06:40:58

2

其他人打我,爲什麼你的代碼是不工作(涉及的this值和parentNode屬性),但我仍想指出的是,通過HTML 事件附件屬性是過時錯了。

您應該使用流行的JavaScript庫如jQuery,Dojo的,YUI,原型,ExtJS的,或MooTools的一個附加的事件中,以確保你的頁面結構從事件邏輯分離。下面是使用jQuery一個簡單的例子:

的JavaScript

$(function() { 
    $(".row").click(function() { 
     alert($(this).parent().attr("rowIndex")); 
    }); 
}); 

HTML

<table> 
    <tr> 
     <td class="row">1.1</td> 
     <td>1.2</td> 
     <td>1.3</td> 
    </tr> 
    <tr> 
     <td class="row">2.1</td> 
     <td>2.2</td> 
     <td>2.3</td> 
    </tr> 
    <tr> 
     <td class="row">3.1</td> 
     <td>3.2</td> 
     <td>3.3</td> 
    </tr> 
    <tr> 
    <td class="row">4.1</td> 
     <td>4.2</td> 
     <td>4.3</td> 
    </tr> 
</table> 
+1

學習jQuery的時間:) – 2009-12-01 06:32:29

+0

我也建議一般學習JavaScript的細節,但無論如何,祝你好運。 – 2009-12-01 06:36:58

+0

同意您應該避免事件屬性,但不需要直接進行事件綁定的偵聽器或框架。 'td.onclick = function(){...}對於只需要一個事件處理程序的常見情況來說很好。 – bobince 2009-12-01 11:04:11

0

嘗試這種方式

$('#datatable').on("click", ".add18", function() { 
    var row = $(this).closest('tr'); 
    var rowIndex = $(this).closest('tr').index(); 
    alert(rowIndex); 
});