5

で奇妙なエラーが発生.stopPropagation()するIE

私のコードは次のとおりです、

$(document).ready(function(){
    var options = {
    $this: "",
    $menuItems: $(".mainMenu > li"),
    $blueBar: $(".blueBar"),
    $submenuBg: $("#submenuBg"),
    $sortOptions: $(".sortOptions"),
    $submenu: $(".submenu"),
    submenuClass: ".submenu",
    blueBarClass: ".blueBar",
    selectedClass: "selected",
    sortOptionsClass: ".sortOptions",
    subSubmenu: "ul",
    subSubmenuClass: "sub-submenu"      
    };

    $sortBy.toggle(function(){
            options.$this = $(this);
            ddlShow(event, options);
        }, 
        function(){
            options.$this = $(this);
            ddlHide(options);
        }
    );

});

var ddlShow = function(event, options){
    event.stopPropagation();
    options.$this.children(options.sortOptionsClass).show();    
}

var ddlHide = function(options){
options.$this.children(options.sortOptionsClass).hide();
}

次のエラーが発生する

オブジェクトはプロパティまたはメソッドをサポートしていません'stoppropagation'

コードはとで正常に機能ChromeFXます。

どうすればこれを解決できますか?

注:同じコードは、がなくても正常に機能しobject optionsます。

4

6 に答える 6

6

IEでは、イベントオブジェクトのJavaScriptでstopPropogationメソッドを使用できません。グーグルで検索すると、ieとwebkitベースのブラウザでのイベントオブジェクトの異なる実装が見つかります。したがって、jQueryがそれを処理するための単一のインターフェイスを提供していることを修正するには、イベントを実行するjQueryの方法を使用して、このエラーの取得を停止する必要があります。

この記事を読んで、より明確にすることができますhttp://www.quirksmode.org/js/introevents.html

于 2012-08-01T10:48:56.500 に答える
6

私のために働いたと交換 e.stopPropagation(); し てください if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true;

ありがとう

于 2014-06-27T09:44:26.117 に答える
3

ハンドラーtoggleにjQueryからのイベントパラメーターを受け入れさせます。

$sortBy.toggle(function(event){ // ADDED PARAMETER
        options.$this = $(this);
        ddlShow(event, options);
    }, 

これを行わないとddlShow、引数を呼び出すと、にevent解決されwindow.eventます。これは、ブラウザー間の一貫性のためにjQueryによって「正規化」されていないオブジェクトです。

于 2012-08-01T10:32:54.540 に答える
1

ここ:

$sortBy.toggle(function(){  <-- you must get the event object from jquery.
        options.$this = $(this);
        ddlShow(event, options);
    }, 
    function(){
        options.$this = $(this);
        ddlHide(options);
    }
);

それで:

$sortBy.toggle(function(event){ ... ddlShow(event, options); }...
于 2012-08-01T10:32:32.497 に答える
0

JQueryはデフォルトでイベントオブジェクトを渡します。関数内で使用するには、関数の引数で宣言する必要があります。

$sortBy.toggle(function(event){

    // Do your stuff here

})
于 2012-08-01T10:38:12.527 に答える
0

また、event引数名として使用することはお勧めできません。

eventグローバルイベントオブジェクトを参照します。次のようなものを定義しますe

function(e, options){
    e.stopPropagation();
    //do stuff here    
}
于 2012-08-01T10:43:40.667 に答える