2012-05-08 20 views
0

ノードを作成しようとすると問題が発生します。コンテキストメニューからは何でもOKですが、ボタンからイベントを作成するとAJAXリクエストはありません。jsTreeボタンからノードを作成

ルック:

bind("create.jstree", function (e, data) { 
    console.log('creating'); 

    $.ajax({ 
     type: 'post', 
     url: '/item/add', 
     data: { 
      name: data.rslt.name, 
      id_menu_content_parent: data.rslt.parent.attr("id").replace("node_",""), 
      id_type_object: data.rslt.obj.attr("rel") 
     }, 
     success: function (dataItem){ 
     } 
    }); 
    console.log('end'); 
}); 

そして今、私は、コンテキストメニューから呼び出すOKですが、私は次のAJAX要求し、最終的に、文字列の末尾、を作成を刺す見るが、私はだけ参照]ボタンをクリックしたとき文字列を作成すると、が作成されます。

どうすればよいですか?

答えて

1

コンテキストメニューから呼び出されたときにcreateが動作するが、ボタンでは呼び出されないときには、あなたのコンテキストメニューでは、作成コールバックが呼び出されたときにおそらくツリーノードが選択されます。ただし、ボタンから作成コールバックを呼び出すと、必ずしもノードが選択されているとは限りません。これにより、定義されていないプロパティを参照しようとするため、$.ajax呼び出しが失敗する可能性が高くなります。具体的には、data.rslt.parent.attr("id")が失敗します。ノードを選択していない場合、新しいノードは親レベルで作成されるため、data.rslt.parentの値は-1になります。これはあなたのconsole.log('end')出力が表示されない理由を説明します。

あなたの質問から、私はあなたのjavascriptをデバッグするデバッガを使用していないと思います。深刻な開発をするつもりなら、ブラウザにはおそらくjavascriptデバッガがあるので、printfスタイルのデバッグに頼ることはできません。デバッガを使用してコードを実行した場合、あなたの投稿の問題の原因をすぐに見ることができます。デバッガを効果的に使用する方法を学ぶにはしばらく時間がかかるかもしれませんが、時間を大幅に節約し、より良いコードを書くのに役立ちます。

ところで、これらの2つのブラウザは優れた開発ツールを提供しているため、FireFoxとFirebugまたはChromeでコードをデバッグすることをお勧めします。

関連する問題