使用jQuery .attr或.prop设置属性值不起作用

mmv*_*sbg 6 javascript jquery prop attr

我创建了一个名为'loaded'的属性按钮,初始值为'no'.点击按钮我正在运行一些ajax,在它的最后我试图将'loaded'属性设置为'yes',这样如果用户不止一次点击按钮,ajax就不会再次运行.

我有这样的事情:http://jsfiddle.net/PDW35/2/

单击该按钮不会更改加载到"是".但是,如果您在.attr调用之后立即执行警报,请执行以下操作:

alert($(this).attr('loaded'));
Run Code Online (Sandbox Code Playgroud)

警报框确实包含"是",这没有用,因为一旦用户点击,上面的相同代码会在屏幕上显示"否"警告框.

如果我使用.prop而不是.attr,它的行为都是一样的.我在这里错过了一点或.prop和.attr只是不使用自定义属性?

编辑:根据以下评论使用ajax更新了jsfiddle:http://jsfiddle.net/PDW35/5/

Har*_*rry 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");
}
Run Code Online (Sandbox Code Playgroud)

请参阅此线程$this,这似乎是AJAX 调用内部似乎不起作用的原因。

  • @mmvsbg 没有伙伴,请检查我对答案所做的更新。在 Ajax 调用中 $this 指的是调用,而不是触发事件的按钮。这就是为什么第一个警报(ajax 外部)有效而另一个警报(内部)无效的原因。 (2认同)