0

push メソッドを使用して、既存の配列 (st[]) に新しい値を追加しています。新しい値の追加は機能しますが、配列内のすべての値は最後に追加された要素の値を取得します。

if(!window.WordCatcher){
    WordCatcher = {};
}

WordCatcher.selector = {};

WordCatcher.selector.getSelected = function(){
    var t = '';
        if(window.getSelection) {t = window.getSelection();}
        else if(document.getSelection) {t = document.getSelection();}
        else if(document.selection) {t = document.selection.createRange().text;}
    return t;
}


st = new Array();

WordCatcher.selector.dblclick = function() {
    st.push(WordCatcher.selector.getSelected());
    console.log(st);
}

次のように jQuery で関数を呼び出します。

$(document).bind("dblclick", WordCatcher.selector.dblclick);

例: 最初に「Die」、2 番目に「Smart」、3 番目に「TV」をダブルクリックすると、firebug で次のログが表示されます。

[Die { constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}] [Smart {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, Smart {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}] [TV { constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, TV {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, TV {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}]

たぶん、誰かが私が何をしているのか知っているでしょう。

よろしく、アンディ

4

2 に答える 2

1

I think your pushing a reference to "t".

everytime its changed - all your array elements are changing , because they are all referencing to the same parameter => "t".

the problem is probably in your function: WordCatcher.selector.getSelected

try to change it to return something else , and check again.

于 2013-02-24T09:48:18.313 に答える
0

内部ウィンドウの選択オブジェクトは一種のシングルトンです。つまり、すべての getSelection() 呼び出しが同じオブジェクトへの同じ参照を返します。したがって、必要なすべてのデータを手動で取得するか、オブジェクトを複製する必要がありますが、すぐに結果を保存する必要はありません。

于 2013-02-24T10:17:16.150 に答える