我有此代码:
success:function(data){
newAttrValue = $('.addwish').attr('data-tooltip').closest().replace("Add to wishlist", data);
$('.addwish').attr('data-tooltip', newAttrValue);
}
并返回:
TypeError: $(...).attr(...).closest is not a function
当我使用时:
success:function(data){
newAttrValue = $('.addwish').attr('data-tooltip').replace("Add to wishlist", data);
$('.addwish').attr('data-tooltip', newAttrValue);
}
在没有.closest()
的情况下工作正常。
我之所以要使用它最接近的原因,是为了避免更改我所有项目的工具提示,而仅更改操作项目的工具提示。
<a data-prodid="{{$cross->id}}" data-userid="{{Auth::user()->id}}" href="#" class="tt-btn-wishlist addwish" data-tooltip="Add to WishList" data-tposition="left"></a>
有什么想法吗?
完整的JavaScript代码
$(document).ready(function(){
$('.addwish').on('click', function(e){
var productID = $(this).data('prodid');
var userID = $(this).data('userid');
e.preventDefault();
$.ajax({url:"{{ url('wishlist') }}",
type:"POST",
dataType:"json",
data:{
"_token": "{{ csrf_token() }}",
"product_id": productID,
"user_id": userID,
},
success:function(data){
alert(data);
}
});
});
});
答案 0 :(得分:1)
由于.attr('data-tooltip')
返回了 string ,因此出现了此错误。字符串没有.closest()
方法。
您可以使用$(this)
来引用被单击的元素。如果要替换整个工具提示,则无需使用.replace()
-只需完全覆盖data-tooltip
:
$('.addwish').on('click', function(e){
var $self = $(this); //This allows us to use $self as the target element
$.ajax({
//...
success: function(data) {
$self.attr("data-tooltip", data);
}
//...
});
});