2013-12-21 16 views
1

這裏是示例http://jsfiddle.net/7vH2q/7/Jquery首先點擊一個警報,然後點擊2個警報等等。但每次點擊只需要1個提醒

點擊要獲取表中的行數。後者將使用該號碼執行另一個代碼。

爲了測試我得到什麼,用alert

而看到奇怪的行爲。如果我第一次點擊按鈕,請參閱1警報,再次單擊,請參閱2警報等。我希望每次點擊只能看到一次警報。

這裏是代碼

<td id="1"><div style="width:30px; border:0px solid #F1F1F1;"> 

<input name="paid_used" type="button" value="" 
onClick="javascript:ajax_post_one_row(); "> 

</div></td> 

這是jQuery代碼

function ajax_post_one_row(){ 

$("table tr").click(function(){ 
alert (this.rowIndex+1); 
}); 

} 

什麼需要做的,看到只有1警報每次點擊?其實我只使用警報進行測試(工作代碼我會評論警報)。

回答

2

這是在事件處理的事件處理程序,所以每次你點擊,你添加其他事件處理程序,並在下一次單擊有是兩個,然後是三個等。

刪除內聯處理程序,並堅持只使用jQuery處理程序

<td id="1"> 
    <div style="width:30px; border:0px solid #F1F1F1;"> 
     <input name="paid_used" type="button" value="" /> 
    </div> 
</td> 

JS

$("table tr").on('click', function(){ 
     alert (this.rowIndex+1); 
}); 

FIDDLE

1

.one()附加一個每個事件類型每個元素至多執行一次的處理函數。

寫:

$("table tr").one("click",function(){ 
    alert (this.rowIndex+1); 
}); 

DEMO here.

More info here.

1

問題的說明:

在按鈕的每次點擊(即在附加的處理程序「ajax_post_one_row」中),您將一個新的處理程序附加到「table tr」上的點擊。

解決方案:

做它更簡單的方法,在表中附上只有一個處理所有按鈕:

$(document).on("click", "table input[type=button]", function() { 
    alert($(this).closest("tr").attr("id")); 
}); 

另一個建議是:使用行標識,沒有行號。

我稍微修改了你的例子,現在它可以工作:http://jsfiddle.net/akhikhl/TVxA4/3/