我不是jquery的专家,我已经使用了几个星期。所以,对不起,如果我的问题对您来说显而易见。
我创建了一个工作正常的jquery脚本。
<script>
$(document).ready(function() {
$("#comment<?php echo $data['id']; ?>").click(function(e) {
$("#comment<?php echo $data['id']; ?>").prop('disabled', true);
if ($("#comment<?php echo $data['id']; ?>").val() == 'Comment') {
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('comment/create', array('post_id' => $data['id'])); ?>",
success: function(data) {
$("#comment<?php echo $data['id']; ?>").after(data);
$(".form").slideDown(2000);
}
});
} else {
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('comment/delete', array('post_id' => $data['id'], 'user_id'=> Yii::app()->user->id)); ?>",
success: function(data) {
$("#comment<?php echo $data['id']; ?>").prop('disabled', false);
}
});
}
</script>
我想替换
所有$("#comment<?php echo $data['id']; ?>")
$(this).
当我这样做时,它不能按预期工作。例如,在if语句中,
$("#comment<?php echo $data['id']; ?>").val() == 'Comment'
它转到else部分并运行delete操作而不是create
*新信息
html页面中的按钮包含以下内容
<p><input type ="button" id="comment<?php echo $data['id']; ?>"
value="<?php echo isset($comment_exist) ? 'Comment' : 'Cancel my Comment'; ?>"></p>
提前感谢您的帮助
答案 0 :(得分:1)
要了解$(this)
,请先了解this
this
内的是对该函数的对象上下文的引用。在任何函数之外,它指的是全局范围,在Web浏览器中,它是window
对象。
$(this)
只是this
的jquery包装器。
您在功能上下文的内部和外部使用this
。
1)您的第一个案例没有任何功能背景 - 您已进入全球范围,this
无法满足您的需求 - 所以您和&#0} #39;我需要做这样的事情:
$('[id^="comment"]').click(function(e) {...
然后,这将为任何ID为&#34; comment&#34;,like,&#34; comment_23&#34;的元素设置一个点击处理程序。或&#34;评论A&#34; ......
2)第二种用法,就在点击处理程序中,应该可以使用简单的替换 - 您只需要对单击的对象进行引用。在点击处理程序中,this
。
if ($(this).val() == 'Comment') { ...
3)现在,ajax
成功回调中的用法是另一个问题。在那里,设置了一个新的对象上下文 - this
引用了ajax对象。因此,在进入ajax函数之前声明对外部this
的引用:
var $thisClicked = $(this);
然后在成功回调中使用此引用,例如:
var $thisClicked = $(this);
$.ajax( ....
success: function(data) {
$thisClicked.after(data);
$(".form").slideDown(2000);
}
答案 1 :(得分:0)
正如其他用户所提到的,此可能无法正常工作
我花了一些时间来了解范围和闭包如何在javascript上运行。看看http://jsfiddle.net/L5qna/,它可能会对你的道路有所启发。
在你的情况下,我会做类似
的事情<script>
$(document).ready(function() {
var myElement = $("#comment<?php echo $data['id']; ?>");
$(myElement).click(function(e) {
您应该可以在 ready 功能中的任何位置使用 myElement ;和在其中定义的函数