2014-10-20 33 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); 
});