【发布时间】:2011-02-16 16:35:45
【问题描述】:
代码:
$('input.media-checkbox').live('click', function(e){
e.preventDefault();
var that = $(this);
if (that.attr('checked') == 'checked'){
var m = that.attr('media');
var mid = 'verify_' + m;
that.parents('div.state-container').find('ul.' + mid).remove();
that.attr('checked', false);
} else {
var url = AJAX_URL;
$.ajax({
type: 'GET',
url: url,
dataType: 'html',
success: function(data){
that.parents('li').siblings('li.verification').children('div.media-verification').append(data).fadeIn(500);
that.attr('checked', 'checked');
}
});
}
return false;
});
我在表单中进行 ajax,然后在必要时触发相关复选框上的单击事件以在另一个部分中进行 ajax。表单被很好地插入,点击事件被触发,选中需要检查的框并触发第二个 ajax,因为复选框的 checked 属性最初是 false。
如果我取消选中其中一个框,我的奶酪会变得凝固。尽管e.preventDefault(),checked 属性在测试之前设置为false,所以if 语句总是执行else 语句。我也用$.is(':checked') 试过这个,所以我完全感到困惑。
似乎 unchecked -> checked 状态会读取原始状态,但 checked -> unchecked 不会。有什么帮助吗?
【问题讨论】:
-
你试过
return false;而不是e.preventDefault吗?另外,你用过function(e) { e = e || event; ... }吗? -
return false,是的 - 它在代码的末尾。它应该在if闭包内吗?我不熟悉第二段代码......它是做什么用的? -
第二位检查
e是否为非空,如果不是,则分配给全局event变量。 -
@Jacob Relkin -
e = e || event在 jQuery 中是不必要的,它会为您标准化事件对象。
标签: javascript jquery events click