2014-10-20 63 views
0

我試圖從HTML參數傳遞給jQuery的,但我只得到1種類型的答案,即使我在我的PHP文件中使用一個for循環,就像下面:傳遞參數從HTML jQuery的

for ($x = 0; $x < $length; $x++) { 
    echo "<button ><a class='href' data-id='$x'>Text</a></button>"; 
} 

我找回它是這樣的:

$y = $('.href').attr('data-id'); 

有什麼事我不這樣做對嗎?

+0

你不是應該使用串聯爲字符串?即:data-id ='「。$ x。」'> .......? – remixdesign 2014-10-20 20:48:20

+0

@remixdesign不需要PHP。 – Jonast92 2014-10-20 20:48:56

+0

PHP將解析雙引號內的變量,@remixdesign – smerny 2014-10-20 20:49:40

回答

0

TL;博士

$(".href").each(function() 
{ 
    console.log($(this).attr("data-id")); 
}); 

說明

你的代碼運行和工作,只是你不覺得它的工作方式。

讓我們假設$length等於2(其實並不重要):

$length = 2; 
for($x = 0; $x < $length; $x++) 
{ 
    echo "<button ><a class='href' data-id='$x'>Text</a></button>"; 
} 

它將產生兩個按鈕,一個id爲0,一個ID爲1

<button ><a class='href' data-id='0'>Text</a></button> 
<button ><a class='href' data-id='1'>Text</a></button> 

您正試圖獲取像這樣的值:

$y = $('.href').attr('data-id'); 

然而,它確實如中所解釋的only fetches the data-id matching the first element which has class 'href'

如果你希望獲得當前點擊的按鈕id那麼你可以做這樣的:

$('.href').on("click", function() 
{ 
    var clickedId = $(this).attr('data-id'); 
}); 

(聽點擊與href類的元素事件)

Working demo

如果你想獲得所有可用的ID,那麼你可以通過其中的每一個,並獲得ID:

<p id="output"></p> 
$(".href").each(function() 
{ 
    var currentId = $(this).attr("data-id"); 
    $("#output").append("Button id: " + currentId + "<br />"); 
}); 

(通過其具有類href元素的每個實例解析)

Working demo

+1

嘗試了您獲得當前點擊的按鈕的ID的建議,它的工作,thanx爲所有他們真正幫助的答案:) – user3497807 2014-10-20 21:22:39

5

http://api.jquery.com/attr/

獲取屬性的值對於該組

(強調)

這是第一元件,即使$('.href')匹配$length元素,它只會給你0

同樣來自文檔,

要分別得到每個元素的值,使用一個循環構造如jQuery的.each().map()方法。

(大家都在發佈代碼樣本,所以......)

var y = $('.href').map(function (index, element) { 
    return $(element).attr('data-id'); 
}).get(); 
1

這只是想給你的第一個ID,並不是一組ID。你需要做一個每個獲得多個ID。

y = []; 
$('.href').each(function() { 
    y.push($(this).attr('data-id')); 
}); 
alert(y); 

Link to jsFiddle

0

使用一個循環來檢索數據值。還可以使用.data()代替.attr()

$('.href').each(function(i,a) { 
    var y = $(a).data('id') 
    // use y 
    console.log(y); 
});