2017-04-24 3 views
0

IDで要素を選択すると、IDが未定義になります。d3のIDが選択されていません

<pre id='output'></pre> 
<input id='my-checkbox' type='checkbox'> 

D3スクリプト:

d3.select('#my-checkbox') 
    .call(function(){ 
     document.getElementById('output').outerHTML = this.id; 
    }) 
    .on('click', function(){ 
     document.getElementById('output').outerHTML = this.id; 
    }); 

これはさえ解消されない "未定義" とpre要素を埋め、私は要素を設定し、一緒this example (fiddle link)

を入れてこれを説明するために

ボックスをクリックします。一方、下のスクリプトは期待通りに機能します:

d3.select('#my-checkbox') 
    .on('click', function(){ 
     document.getElementById('output').outerHTML = this.id; 
    }); 

ここでは何が起こっていますか? d3のcall機能内で要素のIDにアクセスするにはどうすればよいですか?あなたが最初の引数として要素オブジェクトを取得します

+0

ですか? – gaheinrichs

+0

私がリンクしているフィドルをチェックしてください。 JSは私の要素が定義された後です。 – AlexG

答えて

1

d3.select('#my-checkbox').call(function(s){ 
    document.getElementById('output').outerHTML = s.attr('id'); 
}); 
+0

非常にいいです、ありがとう。 'this.id'がそうでないときに' call'でこれがなぜ機能するのか知っていますか? – AlexG

+0

この場合、d3が引数として要素を渡す理由を正確にはわかりません。 'on'が要素を文脈として渡すので、ちょっと混乱します。この場合のコンテキストはおそらく他のものでしょうか? – gaheinrichs

1

D3のドキュメント

からfunction.callのように、コールバック渡して、指定された型の各登録されたコールバックを呼び出しますこれをこのコンテキストとして指定します。詳細については、dispatch.applyを参照してください。

あなたが探している機能は、ページの下部にあなたのjavascriptのコードがeach

.each(function(){ 
    document.getElementById('output').outerHTML = this.id; 
}) 
関連する問題