0

これは、解決すべき問題というよりも、むしろ教育上の問題です。

Ryan Fait の custom elements plugininputを使用してスタイルを設定した があります。

<input type="checkbox" class="styled" id="no-favourite" />

jQuerychange()ハンドラーをバインドしました。

$("#no-favourite").change(function(){
    console.log("changed"); 
});

カスタム要素プラグインのcheckメソッドを編集して、以下を含めました。

try{
    element.onchange(); 
}catch(err){
    console.log(err);
}

これはうまくいきませんでした。どちらも受信されませんでしconsole.logたが、「変更」、最悪の場合はエラーを期待していました。console.log関連する をクリックすると、 jQuerychangeハンドラーが呼び出されlabelます。

次を使用して問題を解決しました。

$(element).change();

だから私は疑問に思っています.なぜjQueryはへのプログラム呼び出しを拾わないのelement.onchange()ですか?

4

2 に答える 2

2

が DOM 要素であると仮定するとelement(それが jQuery 要素である場合は爆発するだけです)、要素のプロパティを呼び出そうとしていますonchange

jQuery を介してイベント ハンドラーをバインドする場合、プロパティは追加されません。onchangeこれらは、ハンドラーをインライン (マークアップで) またはネイティブ JavaScript を介してバインドした場合にのみ存在します。

于 2012-08-16T02:15:59.280 に答える
1

jQueryAPI を使用してバインドされたイベントをdata各オブジェクト内の特別なコンテナーに格納するため、ネイティブ メソッドを使用して実際に呼び出すことはできません(または inlineon*を使用してネイティブに設定することしかできません)。.onchange = function()onchange=

コンソール (chrome) を起動して と入力$.eventすると、イベントの jQuery 内部表現が表示され、「デフォルト」イベントは に保存され$.event.global、内部で管理されます。

http://code.jquery.com/jquery-1.8.0.jsで検索しjQuery.event.global[ type ]てください

    if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
        // No jQuery handlers for this event type, and it can't have inline handlers
        return;
    }

    // Caller can pass in an Event, Object, or just an event type string
    event = typeof event === "object" ?
        // jQuery.Event object
        event[ jQuery.expando ] ? event :
        // Object literal
        new jQuery.Event( type, event ) :
        // Just the event type (string)
        new jQuery.Event( type );
于 2012-08-16T02:19:05.860 に答える