使用jQuery .attr或.prop设置属性值不起作用
我创建了一个名为'loaded'且初始值为'no'的按钮。 点击按钮我正在运行一些Ajax,并在它的最后,我试图将“加载”属性设置为“是”,以便如果用户多次单击按钮,ajax不会再次运行。
我有这样的东西:http://jsfiddle.net/PDW35/2/
点击按钮不会改变加载到“是”。 但是,如果您在.attr调用之后立即执行警报,如下所示:
alert($(this).attr('loaded'));
警告框确实包含'yes',这没有帮助,因为一旦用户点击,上面的相同代码在屏幕上显示'no'警告框。
如果我使用.prop而不是.attr,它们的行为方式都是相同的。 我是否在这里缺少一点,或.prop和.attr是否不适用于自定义属性?
编辑:更新jsfiddle基于下面的评论使用ajax:http://jsfiddle.net/PDW35/5/
我不确定原始代码不能正常工作的原因,但是由于某些原因, $this
似乎是原因。 尝试下面,它似乎工作。 小提琴在这里。
只要找到答案,我会尽力更新答案。
var loaded = $(".preview-button").attr('data-loaded');
if (loaded === "no") {
$.ajax({
success: function (result) {
$(".preview-button").attr('data-loaded', 'yes');
alert($(".preview-button").attr('data-loaded'));
}
});
} else {
alert("data loaded");
}
引用这个线程,这似乎是为什么$this
似乎不起作用在AJAX调用。
阅读这个问题..
这样如果用户多次点击按钮,ajax就不会再次运行。
我认为你需要one()
,它允许事件只运行一次..不需要改变属性和属性
例
$(".preview-button").one('click',function(){
//your ajax stuff
alert('clicked!!!!');
});
您可以为您的click
(或submit
)功能设置属性:
$( ".preview-button" ).click( function() {
this.ajaxCompleted = this.ajaxCompleted || false;
if ( !this.ajaxCompleted ) {
// run your request and set this.ajaxCompleted to true in a callback;
}
// do other stuff
} );
链接地址: http://www.djcxy.com/p/27563.html
上一篇: Using jQuery .attr or .prop to set attribute value not working