1

フォームがあります。私は道場を含めます。すべて正常に動作します。Dojo を使用して、ユーザー入力 (検証のようなもの) に基づいて入力要素のクラス、値、および属性を変更します。

問題は、IE が原因で、入力の「タイプ」を「テキスト」から「パスワード」に変更したい場合、(私が知っている) 新しい入力要素を作成する必要があることです。

この要素 (すべて同じ属性と同じ ID を持つ) を、置き換えた要素として作成すると、私の Dojo 関数は次のようになります。

dojo.query("#password2")
    .connect("onclick",function(){
        // if password2 is equal to the default text
        if( this.value == "Confirm your password" ){
            this.value = "";
            UpdateType( this );    // this is the function that dynamically creates the new input element to have a type of 'password' 
        }
        dojo.query("#list_password2").removeClass("error");
    });

... 新しく作成された要素では動作しなくなります。以前にこの問題に遭遇し、jQuery を使用していて、イベントを要素に再割り当てする livequery プラグインを使用していました。Dojo がこれを行うための、私が気付いていないプラグインまたはネイティブ機能はありますか?

4

3 に答える 3

4

Google の最初の結果がこの回答であり、最新の回答が得られないのはかなり奇妙です。

とにかく、動的に作成された要素にイベントを添付する必要がある人のために、dojo 1.7 以降、イベント委譲を使用できます。簡単な例は次のとおりです。

require(["dojo/on", "dojo/query"], function(on) { 
    on(parentElement, '.child-selector:click', function(e) {
        alert('clicked');
    });
});

このコードは一目瞭然だと思うので、あまり詳しくは説明しません。ただし、イベントの委譲に関する注意事項がいくつかあります。

イベント委任は、バブルするイベントでのみ機能することに注意してください。ほとんどの DOM イベントはバブリングしますが、いくつかの例外があります。およびイベントはバブリングmouseentermouseleaveませんが、mouseoverおよびmouseoutは対応するバブリングです。focusandイベントはバブリングblurしませんが、dojo/on は正規化さfocusinfocusout、同等のバブリングが行われます。また、scrollイベントはバブルしません。

そしてもちろん、最初にロードすることを忘れないでくださいdojo/query...

イベント委任が機能するには、dojo/query をロードする必要があることに注意してください。

詳細な手順については、さらにお読みください...お役に立てば幸いです。

于 2015-03-10T07:02:36.277 に答える
1

まず、最初にいくつかの追加フィールドを作成してから、ユーザーの選択に応じてそれらを表示/非表示にする方が簡単ではないでしょうか。Dojoにはlivequeryはありませんが、Dojoのconnectを使用して、ノードではなく、指定されたIDにイベントハンドラーをバインドすることはそれほど難しくありません。ノード階層を上に移動し、そこまでバブルするすべてのイベントをキャッチし、IDに基づいて適切なノードをフィルタリングする必要があります。たとえば、IDを持つフォームがある場合login、次のことができます。

dojo.query( '#login' ).connect( 'click', function( evt ) {
    console.log( evt );
    if( evt.target.id == 'password2' ) {
        console.log('success');
    }
});

ここでjrburkeの回答も確認してください:dojoはHTML要素イベントに関連付けられた関数にアクセスできますか?

于 2009-10-27T09:41:30.757 に答える
1

Dojo ビヘイビアーは、使用したいメカニズムだと思います。これは dojo.query セレクターを関連付けられたアクション (「動作」) に登録します。DOM への変更を追跡し、新しい一致に動作を再適用します。

このリンクが役立つはずです: http://dojocampus.org/content/2008/03/26/cleaning-your-markup-with-dojobehavior/

また、id ベースではなく、クラス ベースの選択スタイルの使用を検討することもできます。私の経験では、同じ ID を持つノードを削除してから DOM に追加すると、一部のブラウザーで問題が発生します。

于 2009-10-30T13:46:45.107 に答える