第一次点击后,jquery变量似乎永远不会被设置

时间:2015-05-05 08:28:46

标签: javascript jquery

这可能很简单,但答案在此时提到了我。我有一个按钮,我已将数据属性附加到(' data-faqid')

点击网页上的链接会更改此数据,然后当我点击该按钮时,我试图获得这样的值

   $('#faqSaveBtn').click(function () {
        var aFAQID = $(this).data('faqid');
        saveAClassFaq(aFAQID, sf);
    });

我的问题是:

我点击按钮一次,价值似乎很好。我点击应该更改此数据属性的其他按钮,它们在查看dom时似乎有效,但第二次和任何其他点击始终返回第一次单击按钮时的值。

编辑:我用这段代码更改了faqid - 在其他点击事件中

$('#faqSaveBtn').attr('data-faqid', iFaqID);

3 个答案:

答案 0 :(得分:2)

不要使用.attr()来设置数据属性。属性之间存在差异(这些属性仅对HTML源有效)及其结果属性(属性将从HTML源解析一次)

要更改它们,您必须使用.prop()或更确切地说(如果是数据属性).data(name, value)来设置属性

$('#faqSaveBtn').data('faqid', iFaqID);

答案 1 :(得分:1)

好吧我不知道为什么他删除了它或者是否有其他人但@newmediafreek发布了这个

$('#faqSaveBtn').data('faqid', iFaqID);

这似乎有效但不确定原因。显然'.attr'不再使用或折旧? (谁可以跟上?)

答案 2 :(得分:1)

问题是您正在更新元素属性,但之后尝试使用jQuery的内部.data()

解决方案是使用.data()而不是.attr()来更新值。

$('#faqSaveBtn').data('faqid', iFaqID);

会发生什么:

  1. 第一次单击该按钮时,它具有数据属性,$(this).data('faqid')返回该值。 jQuery现在已开始在其内部数据存储中管理faqid,它不再查看该值的元素属性。

  2. 您使用attr('data-faqid', iFaqID)更新属性值。属性更改,但jQuery内部数据不受影响。

  3. 第二次点击,$(this).data('faqid')返回存储在jQuery内部数据结构中的值