所以我更喜欢使用不引人注目的javascript来内联javascript。我觉得使用起来要容易得多。
我一直遇到的问题是,我不知道如何获取我想要使用的每个特定元素的数据。
例如:
我有一个列表,我生成以下HTML(这里是伪代码)
<%for e in list%>
<a href="#" class="delete"><%=e%></a> <!-- <%= e.id %> ??-->
<%end%>
所以我想将javascript附加到其中的每一个&lt; a&gt;将调用ajax帖子的标签,但我需要“id”从后端删除正确的元素。
$('a.delete').click(function() {
// Ajax request using "e.id"
});
我尝试过的一些事情:
attr
方法将ajax请求发送到该URL。 (对于POST请求,我真的不喜欢这个,但它确实有效。rel
属性存储我需要的数据。data
属性。 (我不知道所有浏览器的可用性,因为我们需要支持IE6 +我不喜欢这个想法。)实现这一目标的最佳做法是什么?
答案 0 :(得分:3)
我经常将这种数据存储在标签中,如下所示:
<div id="list">
<a href="/link" post_id="68">Some post</a>
</div>
然后在jQuery中做类似的事情:
$('#list').delegate('a.delete', 'click', function(event) {
event.preventDefault(); // Stop default click event
// ajax stuff here
// $(this).attr('post_id') = 68
});
更新: .attr('post_id')
在IE6中不起作用。
所有这些都使用上面的委托功能。
<div id="list">
<a href="/link"><span class="hide post_id">66</span>Some post</a>
</div>
$('span.post_id', this).text()
可能只是简单ID的恶意之一,但如果你需要存储复杂的数据,那么在元素中添加它可能是一种选择。
<div id="list">
<a href="/link/66">Some post</a>
</div>
$(this).attr('href').match(/\/([0-9]+)$/)[1]
此方法显然取决于您的网址。这是最不显眼的方法之一,假设您的网址结构不太复杂或经常更改。
<div id="list">
<a href="/link" id="post_66">Some post</a>
</div>
$(this).attr('id').split('_')[1]
此方法的好处是您还可以根据特定ID设置元素样式 - 有时很有用。它也是最有意义的。您的ID是唯一的。该锚链接与该帖子相关,即该唯一ID,因此使用id属性是有意义的。
答案 1 :(得分:3)
使用id
属性存储带有id的字符串,如下所示:
<%for e in list%>
<a id="link_<%= e.id %>" href="#" class="delete"><%=e%></a>
<%end%>
通过拆分下划线来读取id:
$('#list a').click(function(){
//old var id = $(this).attr('id').split('_')[1];
var id = this.id.split('_')[1]; //thx @mu
$.ajax({
url: 'http://www.someurl.com/delete.aspx?id=' + id,
//...more
})
});
答案 2 :(得分:1)
您可以为每个<a>
元素添加ID,如<a href=".." id="delete_<%e.id%>" >
,然后当您将事件附加到此链接时,您可以通过字符串indexOf找到ID并使用相关的ajax函数。
答案 3 :(得分:0)
已经有一段时间了,我找到了解决方案,我很满意。它可能不完美,但这是我迄今为止找到的最好的选择。
公平地说,所有这些答案都是正确的 - 它们会正常工作。在这一点上,这只是一个美学问题,而YMMV。
所以,在相同的模板伪代码中:
<% for e in list %>
<a href="#" class="delete"
data-method="delete"
data-url="<%= delete_url(e.id) %>"><%= e %></a>
<% end %>
一些jQuery会做我想做的事情:
$('a.delete').on('click', function(e) {
var self = $(this);
var method = self.data('method');
var url = self.data('url');
$.ajax({
url: url,
type: method
}).done(function() {
alert('woot - success');
});
});
我认为data
元素是了解如何与Web服务交互的最佳方式。这允许我们使用我们将在视图渲染中使用的相同url助手。