2017-02-24 37 views
-1

我想alert(index)如果我點擊當前<p>如何提醒目前指數

<p>1</p> 
    <p>2</p> 
    <p>3</p> 
    <p>4</p> 
    <script> 
     $("p").click(function(){ 
      for(i=0;i<$(this).length;i++) { 
       if($(this).eq(i).data("clicked",true)) 
        { 
         alert(i); 
        } 
      } 
     }) 
    </script> 

我想這個代碼,但它顯示0不管我點擊。 我希望看到當前索引與alert.For前。當我將點擊第二<p>,它應該顯示1

+1

目前尚不清楚你想要做什麼,但將'警報($(本)的.index());'不行? –

+0

請發佈您的HTML。我們需要[mcve] – j08691

回答

2

在你的原代碼,你設置上限的循環是這樣的:

for(i = 0; i < $(this).length; i++) 

this是要指只是一個元素你點擊了,所以$(this).length總是會是1,它始終有一個索引0

此外,您的測試是:

if($(this).eq(i).data("clicked", "true")) 

這句法設置數據屬性clickedtrue(未測試,看看如果值是true)。因此,它總會成功,這就是爲什麼你總是被帶到if聲明的true分支,然後總是得到0

爲了測試性能,你應該寫:

if($(this).eq(i).data("clicked") === "true") 

一個更加簡單的實現是使用index()。有關index()的詳細信息,請參閱this。這是一個完整的版本,提醒您是否第一次點擊某個元素。不需要循環或使用eq()(這會讓您獲得指定索引處的元素,而不是索引本身)。

$("p").click(function(){ 
 
    // Get the index position of the currently clicked element, within the set of <p> elements 
 
    var idx = $(this).index("p"); 
 
    
 
    // Test to see if the element has already been clicked. 
 
    if($(this).data("clicked") === "true"){ 
 
    alert("Element " + idx + " has already been clicked."); 
 
    } else { 
 
    alert("You just clicked element " + idx + " for the first time."); 
 
    } 
 

 
    // Mark the element as clicked for next time: 
 
    $(this).data("clicked", "true"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>1</p> 
 
<p>2</p> 
 
<p>3</p> 
 
<p>4</p>

+0

我可以使用和eq()嗎?爲什麼它顯示1不是0. – Arman

+0

@Arman請參閱我的更新答案,它會生成基於0的結果。你可以使用'for'循環,如果你這樣做了,你根本不需要'eq'。但是,當'index()'解決問題時,爲什麼你會這麼做呢? –

+0

@Arman,沒有'.eq()'實際上是在提供的索引上選擇元素。當你點擊''時,它顯示1的原因是'.index()'返回所選項目在其父項上下文中的索引。如果您想從確切元素列表中獲取索引,請將其包裝在單獨的元素中。 –