使用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

下一篇: Why jQuery 1.9+ attr() method not deprecated?