我已经检查了所有与SO相关的问题,但仍在寻找最佳答案。
我正在编写一个评论系统,任何人都可以评论和登录的用户都可以喜欢他们的评论(仅喜欢或撤消他们的喜欢...不喜欢)。
为此,我正在使用一个复选框,然后onClick调用一个ajax函数,该函数将喜欢该评论,如果再次单击,它将撤消该操作。
问题
最初,当有人喜欢该评论时,ajax调用会喜欢它,并且在成功时,它将attr onClick更改为different();。功能,但是当我单击它时,它仍然无法正常工作...
我的尝试
const example = function generateExample(defaultList) {
let container = new Map(defaultList)
return {
add(list) {
container = new Map(container.concat(list));
},
remove(list) {
container = new Map(container.filter(item => !list.includes(item)))
},
read(id) {
return container.get(id)
},
}
}
和JS(传递给JS函数的ID看起来像1105-249532-18117)
<?php if($review['is_liked']){ ?>
<input type="checkbox" name="review_like" id="<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>" checked="checked" onclick="unlike(<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>);" />
<?php } else { ?>
<input type="checkbox" name="review_like" id="<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>" onclick="like(<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>);" />
<?php } ?>
我要传递给like / unlike函数的id在控制台中无法正常工作,并且即使使用toString func或wdout,拆分函数也是如此...
请解决此问题或提出更好的方法来完成此任务...
答案 0 :(得分:0)
您可以在客户端以更简单的条件来处理它。将标记更改为:
<input type="checkbox" name="review_like" data-id="<?php echo $review['review_id']; ?>" data-customer="<?php echo $review['customer_id'] ?>" data-product="<?php echo $review['product_id']; ?>" checked="<?php echo ( $review['is_liked'] ? "checked" : ""); ?>" />
并添加此jQuery脚本以处理复选框更改:
$('input[name="review_like"]').change ( function ()
{
$.ajax (
{
url: 'index.php?route=product/product/like_review',
type: "get",
data:
{
'is_liked': $(this).prop('checked'),
'review_id': $(this).data ( 'id'),
'customer_id': $(this).data ( 'customer'),
'product_id': $(this).data ( 'product')
},
dataType: 'json',
success: function ( json)
{
console.log ( ( $(this).prop('checked') ? 'Unliked' : 'Liked') + ' review ' + $(this).data ( 'id') + ', customer ' + $(this).data ( 'customer') + ', product ' + $(this).data ( 'product'));
},
error: function ( xhr, ajaxOptions, thrownError)
{
alert ( thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
});