在你的原代碼,你設置上限的循環是這樣的:
for(i = 0; i < $(this).length; i++)
this
是要指只是一個元素你點擊了,所以$(this).length
總是會是1
,它始終有一個索引0
。
此外,您的測試是:
if($(this).eq(i).data("clicked", "true"))
這句法設置數據屬性clicked
到true
(未測試,看看如果值是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>
目前尚不清楚你想要做什麼,但將'警報($(本)的.index());'不行? –
請發佈您的HTML。我們需要[mcve] – j08691