6

ドキュメントでは、テキストフィールドのクリックイベントに引数を渡すことで、バブリングを防ぐことができるようです。

http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.UI.TextField-event-click

彼らの新しいAlloyフレームワークを使用して、次のように宣言されたテキストフィールドがあります。

<TextField id='name' onClick='doStuff' />

そして私のコントローラーにはこの機能があります:

function doStuff(e) {
  alert('hello');
}

ただし、この要素はonClickイベントもあるcontainer要素にラップされているため、テキストフィールドをクリックしたときにこの要素が発生しないようにします。どうすればこれを達成できますか?

4

3 に答える 3

11

試す:

function doStuff(e){
    e.cancelBubble = true;
    alert('hello');
}
于 2013-03-01T15:34:02.550 に答える
2

このコードをxmlファイルで記述したとします。

<View id = “parent” onClick = “parentClicked”&gt;
        <ImageView id=“sampleImage”  onClick= “childImageClicked”&gt;
        </ImageView> 

</View>

それで

TSSでこれを試してください:

“#sampleImage” : {

 bubbleParent : false,

}

または、Javascriptで実行したい場合:

function function_name(e){

    e.cancelBubble = true;
}

http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Event-property-cancelBubble

これがあなたのために働くことを願っています。

于 2016-08-05T11:42:24.473 に答える
0

おそらく、より良い方法は、ソースプロパティをチェックすることです。

たとえば、次のビューがあるとします。

<View id="parent" onClick="onParentClicked">
    <View id="child1" onClick="onChild1Clicked"/>
    <View id="child2" onClick="onChild2Clicked"/>
</View>

解決策1:バブルの親プロパティを使用する(Long)

他の答えと同じように、tssファイルに書き込むことができます。

'#child1': {
    bubbleParent : false,
}
'#child2': {
    bubbleParent : false,
}

しかし、これは多くの子要素で退屈になる可能性があります。

解決策2:Javascript e.cancelBubbleを使用する(さらに長い)

javascriptで行う:

function onChild1Clicked(e) {
    e.cancelBubble = true;
}
function onChild2Clicked(e) {
    e.cancelBubble = true;
}

繰り返しますが、これは面倒です。

解決策3:Javascript e.sourceを使用する(最良)

親イベントハンドラーのソースを確認するだけです。

function onParentClicked(e) {
    if (e.source.id !== 'parent') {
        return;
    }
    alert("Parent clicked!");
}

これははるかに高速です。特に子要素が多い場合。

于 2019-02-01T00:21:25.173 に答える