2016-06-12 62 views
1

我遇到問題,當我點擊表格時,沒有顯示任何內容。 enter image description here在表格行點擊,提示框顯示點擊值

當我點擊讓我們說客戶名='約翰'的行,名字'約翰'應該出現在警告框上,但沒有任何反應。

這是我的表單擊代碼。

$(document).ready(function(){ 
$("#parentElementIdHere").on("click", "#test tr", function(e) { 
var name = $(this).find("td").first().text(); 
alert(name); 
}); 

而且,這裏是我生成的表代碼。

if(!empty($_GET['q'])){ 
$q = $_GET['q']; 
$query="select * from customer where customername like '$q%'"; 
$result = mysqli_query($dbconn,$query); 
echo "<div id='parentElementIdHere'>"; 
echo "<table id='test' border=3> 
<tr> 
<th>Customername</th> 
<th>nric</th> 
<th>email</th> 
<th>mobileno</th> 
<th>telephoneno</th> 
<th>address</th> 
<th>postalcode</th> 
<th>datejoined</th> 
<th>points</th> 
</tr>"; 
while($row = mysqli_fetch_array($result)){ 
echo "<tr>"; 
echo "<td>" . $row['customername'] . "</td>"; 
echo "<td>" . $row['nric'] . "</td>"; 
echo "<td>" . $row['email'] . "</td>"; 
echo "<td>" . $row['mobileno'] . "</td>"; 
echo "<td>" . $row['telephoneno'] . "</td>"; 
echo "<td>" . $row['occupation'] . "</td>"; 
echo "<td>" . $row['address'] . "</td>"; 
echo "<td>" . $row['postalcode'] . "</td>"; 
echo "<td>" . $row['datejoined'] . "</td>"; 
echo "<td>" . $row['points'] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 
echo "</div>"; 
} 

難道問題是因爲我的表生成是由於ajax不斷變化?

+0

是的,通過ajax動態更改表是* one *問題。另一個問題是你的選擇器'#test tr#name''說選擇帶有id =「name」的元素,它們是'tr'元素的後代*,但它實際上就是你所有的'tr'元素有這個ID。更不用說重複的ID是無效的HTML。 – nnnnnn

回答

0

我設法解決這個問題。我測試了一個非ajax生成的sql表,並做了它。然後我把JavaScript代碼放到這個文件中並試用了。這是我使用的代碼。

$(document).ready(function(){ 
}).on('click','.test tr',function(){ 
var id = $(this).attr('value'); 
alert(id); 
}); 

感謝所有幫助過我的人,我感激不盡!

+0

行的值屬性是什麼賦予O.o我的意思是它是如何賦予名稱的?我只是好奇。 :) – BlackBurn027

+0

@ BlackBurn027 ermmm我回應了這一點,當我生成的表。回聲「」; – Marcus

+0

Okie,儘量不要將「value」屬性附加到HTML使用data-*屬性的非輸入標籤,如,這是HTML5功能允許您將數據存儲在任何HTML屬性中,你可以在jquery中像$('tr')那樣訪問它。data('value'); – BlackBurn027

2

要獲得名值單擊行

  $("tr").click(function() { 
      var str = this.innerText; 
      var i = str.split('').indexOf(" "); 
      alert(str.slice(0, i)); 
     }) 

http://codepen.io/nagasai/pen/QENwgQ

獲得的點擊表格單元格值

$("td").click(function(){ 
    alert(this.innerText); 
    }) 

爲參比http://codepen.io/nagasai/pen/jrqEBz

codepen URL的任何值

希望這對你有所幫助

+0

答:問題是要求在* row *被點擊時顯示* name *,而不是被點擊的td的內容被顯示,而且B你的演示不起作用(DOM元素不會有一個'.slice()'方法)。 – nnnnnn

+0

請現在檢查...它現在正在工作 –

0

主要有兩個問題與您的代碼:

  1. 你選擇'#test tr #name'說,選擇與id="name"是TR元素後代的所有元素,但它實際上是你的TR元素,所有的有ID。 (和說它們具有相同的ID 所有的,重複的ID是無效的HTML。)

  2. 調用.click()綁定一個單擊處理程序,在那一刻存在元素。這意味着,當您的表由於Ajax調用而發生更改時,即使您修復了選擇器,您的點擊處理程序也不適用於新加載/創建的元素。

這兩個問題的解決方案是使用一個委派事件處理程序,它綁定到表元素的父(或最近的祖先元素,它無法獲得通過Ajax調用覆蓋):

$(document).ready(function(){ 
    $("#parentElementIdHere").on("click", "#test tr", function(e) { 
    var name = $(this).find("td").first().text(); 
    alert(name); 
    }); 
}); 

當點擊父元素的任何後代元素時,jQuery將檢查具體點擊的元素的選擇是第二個參數the .on() method相匹配,如果是的話,它會調用你的函數this設置到匹配元素。由於匹配元素是tr元素,因此您可以使用.find("td").first()來獲取該行的名稱td。

演示:https://jsfiddle.net/269Lt9hm/

+0

感謝您的幫助,但它似乎仍然沒有在我身邊工作。在看過你的代碼後,我已經更新了我的代碼,請再看一遍,有什麼我錯過了嗎? – Marcus

+0

你說表格是通過Ajax更新的 - 你如何顯示它?你能證明JS嗎?也許我沒有很好地解釋它,但我所說的父元素需要是一些祖先元素,它不會被Ajax更新,Ajax代碼將加載該元素。 (您在問題中添加到代碼中的更改不起作用,因爲您在Ajax響應中添加了父元素 - 我在演示中使用了它,因爲我無法從演示中調用PHP,所以我只是通過動態添加個別行來模擬它。) – nnnnnn

+0

嗯,也許我可以通過電子郵件發送給你兩個php文件,如果你不介意的話?它有點難以繼續編輯這裏的代碼哈哈。同時它可能是因爲其他代碼不允許它運行 – Marcus