那么我的问题是这样的,让我们举个例子。一个页面有30个链接,每个链接下都有一个like按钮。当有人点击一个赞按钮时,链接会通过一个 ajax 发布请求到一个 php 文件而获得赞。
但是是否可以通过使用 jquery 或 javascript 编写一组代码来查找喜欢哪个链接(通过获取链接的 ID 或其他内容),然后通过 ajax 请求将其发送到 php,而不是编写 30 行每个被喜欢的链接的 ajax 发布请求。谢谢
那么我的问题是这样的,让我们举个例子。一个页面有30个链接,每个链接下都有一个like按钮。当有人点击一个赞按钮时,链接会通过一个 ajax 发布请求到一个 php 文件而获得赞。
但是是否可以通过使用 jquery 或 javascript 编写一组代码来查找喜欢哪个链接(通过获取链接的 ID 或其他内容),然后通过 ajax 请求将其发送到 php,而不是编写 30 行每个被喜欢的链接的 ajax 发布请求。谢谢
data-*
您可以使用属性将每个链接与其按钮相关联。在您的按钮上,使用data-mylink="linkId"
并为其提供链接的 ID。
然后,在您的 onclick 上,您可以执行以下操作:
$('.buttonClass').on('click', function(){
var myLinkId = $(this).attr('data-mylink');
//as David Barker suggested, you can also grab it with $(this).data('mylink')
//whatever else you have to do.
});
或者,您也可以将它们都包装在一个 div 中并执行以下操作:
$('.buttonClass').on('click', function(){
$(this).parent().find('a').text() or .val() or .attr('href');
});
正如 War10ck 所指出的,如果您的项目是动态创建的,您将需要委托:
$(document).on('click', '.buttonClass', function () {
// your code here
});
这就是说:将此单击用于任何存在的class="buttonClass"
按钮或稍后创建的任何按钮class="buttonClass"
。
这是我用来解决开发 Web 应用程序的问题。您可以使用data-*
@Yatrix 所说的属性,也可以绑定.data()
到您的按钮。我更喜欢第二种方式。我猜你是通过模板或动态渲染这些按钮,所以你可以使用.data('foo','bar')
然后通过$(this).data('foo')
($(this)
指按钮)检索它,然后获取这些数据并通过 AJAX 发送。这些是解决此问题的相同方法,但唯一的区别是第二个对任何人都不可见。
我会在直接的javascript中这样做。不过我还没有测试过,所以它可能不是 100% 正确的。
HTML:
<a href="page-to-be-liked1.html">Link</a>
<div class="like-button" data-likeID="1">Button</div>
<a href="page-to-be-liked2.html">Link</a>
<div class="like-button" data-likeID="2">Button</div>
<a href="page-to-be-liked3.html">Link</a>
<div class="like-button" data-likeID="3">Button</div>
<a href="page-to-be-liked4.html">Link</a>
<div class="like-button" data-likeID="4">Button</div>
JavaScript:
var buttons = document.getElementsByClassName("like-button");
var post_to = '/location-of-php-script.php';
for(var i=0;i<buttons.length;i++){
buttons[i].addEventListener('click', buttonClick);
}
function buttonClick(event){
var request = new XMLHttpRequest();
request.open("POST", post_to, true);
request.send('likeID='+this.getAttribute('data-likeID'));
}