2011-11-15 25 views
1

私は次のような場合があります:javascriptを使ってオブジェクトを動的に作成したいのですが、onclick関数があります。私はHTMLのどこかにこの要素を挿入して、onclick関数が捕捉されることを期待しています。動的に生成されたonclickはIE7で処理されません

var newElement= new Element('li', { 'id' : 'Foo', 'onclick' : 'Bar();'}) 
$("randomElement").grab(newElement, 'top'); 

これをテストしたところ、Firefox、Opera、Chrome、Internet Explorer 8以上で正しく動作しています。私の問題はインターネットエクスプローラ7にあり、イベントをまったく処理しません。
IE7のサポートを中止するオプションがありますが、可能な限り多くのブラウザをサポートしたいと考えています。 この問題の解決策または回避策はありますか?

答えて

2

実際にイベントを追加する代わりに、evalという種類の 'Bar()'文字列をonclick属性に割り当てているように見えます。イベントを直接渡す場合は、camelCaseを実行する必要があります。したがって、onclickの代わりにonClickにする必要があります。 注意してください。変更しても機能しません。次のようになります。

次のようにエレメントの書き換えを試してみることはできますか?

var newElement = new Element('li', { 
    id: 'Foo', 
    events: { 
     click: function() { Bar(); } 
    } 
}) 

これは実際にはMooToolsの中のイベントを持つ要素をインスタンス化する好ましい方法である、と明示的にクリックコールバックの一部としてBar関数を呼び出すことによって暗黙的にevalを避けることができます。

+1

'click:function {Bar(); } '? 'click:Bar'はもっと良いでしょう... – MattiSG

+0

' bar'は 'newElement'を宣言しているところではまだ定義されていません。私は意図的にこの5行のコードをアプリケーション上のどこにでも置くことができるように、匿名関数に囲んでいます。 – gonchuki

関連する問題