2016-04-05 6 views
2

に示した私はここで、特定のファイルの名前を変更するために私のサーバーへのコールを作ってるんだ、コードのクライアント側です:.dataの()は、コードを更新するために失敗したクロムインスペクタ

function rename_file(filepath, filename, object){ 
    $("#loading").html('<i class="fa fa-circle-o-notch fa-spin"></i>'); 
    $.getJSON('queries.php', { 
     q: 'renameFile', 
     old_path: filepath, 
     new_name: filename 
    }, function(data){ 
     if (data.message == "File renamed") { 
      $("#loading").html(data.message); 
      console.log(data.name); 
      var mod_name = data.name; 
      object.data('file', mod_name); 
      console.log(object.data('file')); 
     } else { 
      $("#loading").html(data.message); 
     } 
    }); 
} 

機能が同じように呼び出されその:

$(this)がある
rename_file(old_filepath, new_filename, $(this)); 

<div class="filename_container" id="file_165161" data-file="toto.doc" data-folder="" class="fileClic"> 
    toto.doc 
</div> 

私はの名前を変更するとき、私は何を得るのコンソールにログインしますtoto2016.docには次のとおりです。

toto2016.doc 
toto2016.doc 

のでdata-fileに含まれるデータはtoto2016.docする必要がありますが、私はクロームインスペクタで検査したとき、私はまだtoto.docを取得します。そのため、ファイルの名前を2度変更すると失敗します。

私は、正しいオブジェクトが関数に送信されることをテストしました。私はここで何か間違っていますか?

答えて

3

これは仕様です。 data()を使用して値を設定すると、jQueryがメモリ内に保持するオブジェクトのみが更新されます。DOM内の要素の属性は更新されません。

data()のゲッターを使用して値を取得すると、値が正しく設定されていることがわかります。

+0

ありがとう、ゲッターは確かに正しい情報を与える。それはバグですか、それとも目的にかなっていますか? –

+1

それは完全に目的です。インメモリオブジェクトを使用すると、すべての要求に対してDOMを読み書きするよりもパフォーマンスが向上し、文字列だけでなくすべてのデータ型を格納できることを意味します。たとえば、必要に応じて、セレクタ、Date、さらにはjQueryオブジェクトを 'data()'に格納することができます。 –

+0

ああ、あなたはオブジェクトを格納することができます非常に興味深い!説明ありがとう。私はタイマーがそうすることを可能にするとすぐにそれを解決としてマークします。おかげでもう一度 –

関連する問題