1

だから、私はjavascriptが初めてです。私のコードは次のとおりです。これは、キャンバスといくつかの境界線を含む xaml ファイルに基づいています。

var defaultPage = null;
var aantalKliks;
var correcteBorders;
var incorrecteBorders;
var geenAntwBorders;

function onLoaded() {
    defaultPage = document.getElementById('DefaultPage');
    alert('In onloaded van Default.xaml.');
    aantalKliks = 0;
    aantalBorderKliks = 0;

    correcteBorders = new Array();
    for (var i = 0; i < 3; i++) {
        correcteBorders[i] = defaultPage.content.findName('CorrecteBorder' + i);
    }
    incorrecteBorders = new Array();
    for (var i = 0; i < 3; i++) {
        incorrecteBorders[i] = defaultPage.content.findName('IncorrecteBorder' + i);
    }
    geenAntwBorders = new Array();
    for (var i = 0; i < 3; i++) {
        geenAntwBorders[i] = defaultPage.content.findName('GeenAntwBorder' + i);
    }

}

function OnCanvasClicked() {
    if (aantalKliks == 2) {
        aantalKliks = 0;
    }
    if (aantalKliks == 0) {
        for (var i = 0; i < correcteBorders.length; i++) {
            correcteBorders[i].Visibility = 'Visible';
        }

        for (var i = 0; i < incorrecteBorders.length; i++) {
            incorrecteBorders[i].Visibility = 'Visible';
        }

        for (var i = 0; i < geenAntwBorders.length; i++) {
            geenAntwBorders[i].Visibility = 'Visible';
        }

    } else if (aantalKliks == 1) {
        for (var i = 0; i < correcteBorders.length; i++) {
            correcteBorders[i].Visibility = 'Collapsed';
        }

        for (var i = 0; i < incorrecteBorders.length; i++) {
            incorrecteBorders[i].Visibility = 'Collapsed';
        }

        for (var i = 0; i < geenAntwBorders.length; i++) {
            geenAntwBorders[i].Visibility = 'Collapsed';
        }
        aantalKliks++;
    }



    function borderClicked(sender) {

        for (var i = 0; i < correcteBorders.length; i++) {
            correcteBorders[i].Visibility = 'Collapsed';
        }

        for (var i = 0; i < incorrecteBorders.length; i++) {
            incorrecteBorders[i].Visibility = 'Collapsed';
        }

        for (var i = 0; i < geenAntwBorders.length; i++) {
            geenAntwBorders[i].Visibility = 'Collapsed';
        }
        sender['Visibility'] = 'Visible';
    }

キャンバス内の任意の場所をクリックすると、関数 OnCanvasClicked がトリガーされ、すべての境界線が非表示/再表示されます。特定の境界線をクリックすると、関数 borderClicked がトリガーされます。関数 borderClicked は、特定の境界線をクリックするとトリガーされますが、OnCanvasClicked 関数も直後に実行されるため、望ましくない結果が生じます。境界線をクリックした場合に OnCanvasClicked 関数を無視する方法が必要だと思います。しかし、正直なところ、ほとんどのソリューションでそれらが何を意味するのかをよく理解していなかったので、誰かが私が何をする必要があるか (そして私が何をしているのか) を簡単な方法で説明してくれることを望んでいました.

4

3 に答える 3

4

borderClicked 関数が発火したときに event.stopPropagation() を設定する必要があります

于 2013-04-26T13:12:12.670 に答える
0

@Harshitは正しいです

borderClicked 関数が発火したときに event.stopPropagation() を設定する必要があります

バブリングを理解するのに非常に役立つこのリンク/サンプルを追加したかっただけです

http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/ie9_event_phases.htm

于 2013-04-26T13:35:15.930 に答える
0

Javascriptがそれ以上実行されないようにするこれを試してください

event.preventDefault()
于 2013-04-26T13:29:23.527 に答える