2016-10-10 7 views
0

私は以下の2つのリンクを持っています。ユーザーは、[編集]をクリックすると、私はここでcancel-editjQueryデータ属性の更新が機能していませんか?

<a class="btn btn-default js-edit" href="#" >Edit</a> 

<a class="btn btn-default js-cancel" href="#" data-action="cancel-add">Cancel</a> 

にキャンセルリンクのデータ-action属性を更新するこの達成するための私のスクリプトです:コンソールで

$(".container").on('click', '.js-edit', function (e) { 

    e.preventDefault(); 

    $('a.js-cancel').data('action', 'cancel-edit'); 

    console.log($('a.js-cancel').data('action')); 

}); 

、上記の結果を期待通りです。つまりコンソール表示cancel-edit

上記のアクションの後で[キャンセル]リンクをクリックすると、以下のスクリプトは機能しません。コンソールで結果を表示しても、それでも出力されるのはcancel-addですか?

$(".container").on('click', '.js-cancel', function (e) { 
    e.preventDefault(); 

    var a = $(this); 

    if (a.attr("data-action") == 'cancel-edit') { 
     // do something 
    } 

    console.log(a.attr("data-action")); 
}); 
+0

.data()でデータ属性を更新すると、マークアップが更新されないので、 'a.data( 'action')== 'cancel-edit''を使ってデータをチェックする必要があります。 –

答えて

2

DOMでdata-*属性を更新しませんdata()のjQueryの内部を使用しているためではなく、オブジェクト自体インチ

単にあなたのクリックハンドラ内で再びdata()を呼び出す:

if(a.data('action') == 'cancel-edit') 
{ 
     // do something 
} 
else 
{ 
     // do something else 
} 
0

を私はあなたの代わりに.ATTR()beacause .prop()あなたの最新の値を与えるの)(.prop使用することをお勧めします、

+0

これはそうではありません。 prop() 'と' attr() 'はDOMを扱いますが、' data() 'では直接扱えません... https://jsfiddle.net/fqtmg86s/ – BenM

+0

私は間違った方法で質問します –

関連する問題