从element获取类名,并选择具有相同类的所有元素
$('.classToClick').live("click", function () { $(this).attr('disabled', 'disabled'); $(this).val("lol"); $.post('post.php', { string: "lalala" }, function (data) { $(this).removeAttr('disabled'); }); })
这段代码不起作用,因为在post中我们使用$(this)
。 当我们将其更改为.classToClick
,它可以正常工作。
我们如何才能获得点击元素的类,以便我们可以像这样使用它?
$('.classToClick').live("click", function () { var className = $(this).name; $(this).attr('disabled', 'disabled'); $(this).val("lol"); $.post('post.php', { string: "lalala" }, function (data) { $(className).removeAttr('disabled'); }); })
有可能做类似的事情吗?
点击后,您需要捕获类名,可以通过以下方式完成:
var className = $(this).attr('class'); //Alternatively, $(this).prop('class')
当你以后在$ selector中引用它时,你需要包含句点来表示正在选择一个类,如下所示:
$('.' + className).removeAttr('disabled');
码:
$('.classToClick').live("click", function() { var className = $(this).attr('class'); $(this).attr('disabled', 'disabled').val("lol"); $.post('post.php', {string : "lalala"}, function(data) { $('.' + className).removeAttr('disabled'); }); })
工作实例
这将有效:
$('.classToClick').live("click", function() { var $el = $(this); $el.attr('disabled', 'disabled'); $el.val("lol"); $.post('post.php', {string : "lalala"}, function(data) { $el.removeAttr('disabled'); }); });
将jquery el
存储在var中比一次又一次地调用$(this)
更有效。 有一个谷歌保罗爱尔兰和jQuery性能提示:)
基本上在$.post
$(this)
回调中没有任何代表,你可以将$(this)分配给一个变量然后使用该变量来处理这样的事情
var $field = $(this);
然后可以用它作为
$('.classToClick').live("click", function() { var className = $(this).name; $(this).attr('disabled', 'disabled'); $(this).val("lol"); var field = $(this); $.post('post.php', {string : "lalala"}, function(data) { $(field).removeAttr('disabled'); });
})
您还可以为回调设置上下文。 使用prop()
方法更改元素属性的正确方法也是如此。
$('body').on('click', '.classToClick', function() { $(this).prop('disabled', true) .val("lol"); $.ajax({ type: 'POST', url: 'post.php', context: $(this) data: { string : "lalala" }, success: function(data) { this.prop('disabled', false); } }); })
$(this).name
将主要为您提供undefined
或null
值,因此它不起作用。 你可以做的是将对象的引用存储在局部变量中,然后在post success handler中使用它。 试试这个。
$('.classToClick').live("click", function() { var $elem = $(this).attr('disabled', 'disabled').val("lol"); $.post('post.php', {string : "lalala"}, function(data) { $elem.removeAttr('disabled'); }); });