2009-05-06 5 views
22

で動作するJavaScriptを使用してリンクをクリックすると、このように機能を追加することを示唆しているネット上で何かを見つけました:エミュレートは、私がpage..I上のリンクをクリックするとJavaスクリプトを持つようにしたいIE

function fireEvent(obj,evt){ 

    var fireOnThis = obj; 
    if(document.createEvent) { 
     var evObj = document.createEvent('MouseEvents'); 
     evObj.initEvent(evt, true, false); 
     fireOnThis.dispatchEvent(evObj); 
    } else if(document.createEventObject) { 
     fireOnThis.fireEvent('on'+evt); 
    } 
} 

次に呼び出しますそれを使用して:

fireEvent(document.getElementById('edit_client_link'),'click'); 

これはFFでうまくいくようですが、IEではうまくいきません!

アイデア?

答えて

36

私はまだdocument.createEventObjectを呼び出す必要があると思います - あなたはそれがそこにあることだけを確認しました。未定義のコードは続きますが、docsに基づいて動作します。

+17

を取得している場合は、これを試してみてください。良くやった!誰かが単にJavaScriptに関する質問をしたとき、誰もが自分のお母さんが常にフレームワークに乗っているという事実は嫌です。はい、私たちは知っています、私たちは知っています、jQueryはすべてを行い、あなたのために夕食を作ることができます。 (私はjQueryとMochiKitの両方を使用していますが、私はまだJavaScriptを使用しています)。 –

+1

お待ちください、これは意味をなさない。あなたは 'document.createEventObject()'を呼び出していますが、返すイベントでは何もしません。これは質問のコードとどのように違うのですか?なぜそれは(おそらく)動作しますか?私はJasonがコードを動作させるために何か変わったと思うように誘惑されています。 – s4y

+0

@Sid、あなたはJasonが何かを変えるのは正しいです。必要に応じて詳細については、私のリビジョンを参照してください。 – Louis

2

これは当初私にとっては役に立たなかったし、コードにIE部分のパラメータがないことがわかりました。ここでは動作するはずの更新です:

function fireEvent(obj, evt) { 
    var fireOnThis = obj; 

    if (document.createEvent) { 
     // alert("FF"); 
     var evtObj = document.createEvent('MouseEvents'); 
     evtObj.initEvent(evt, true, false); 
     fireOnThis.dispatchEvent(evtObj); 
    } 

    else if (document.createEventObject) { 
     // alert("IE"); 
     var evtObj = document.createEventObject(); 
     fireOnThis.fireEvent('on'+evt, evtObj); 
    } 
} 
0

あなただけのリンクのクリックをシミュレートしたい場合は、これを使用することができます:

function clickLink(id){ 
location.href=document.getElementById(id).href; 
} 
0

我々は、右クリックをシミュレートする簡単な方法を発見した(でテストIE8)。ダブルクリックまたは2回のシングルクリックを使用し、Shift-F10を使用して右クリックします。なぜ私はこの作品が正しいのか分かりませんが、そうしています。以下のサンプルコードでは、Seleniumメソッドを使用して2回クリックした後、IEドライバを使用してWebElementを検索し、右マウスボタンのクリックをエミュレートするキーシーケンスShift-F10を送信します。これをGWTベースのWebアプリケーションのテストに使用します。これもうまく動作しなかった1つの場所は、マウスの座標にコンテキストメニューが表示されるように設定されたツリーコントロール内にありました。多くの場合、マウスの座標は負であったため、メニュー項目を右クリックすると子メニューオプションが表示されませんでした。このケースを処理するために、コントロールに少しのコードを追加しました。マウス座標が負の場合、コンテキストメニューは0,0に表示されます。

selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]"); 
selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]"); 
new InternetExplorerDriver().findElement(By.xpath("//td[@role='menuitem' and contains(text(), 'Add')]")).sendKeys(Keys.SHIFT, Keys.F10); 
+0

'InternetExplorerDriver'が標準設定の一部であるかどうかわかりません... –

1

あなたはまだ私は先に行って、IE 7には、この自分自身をテストし、それが動作エラー(jqueryの+のプロトタイプの使用)

function fireEvent(element,event){ 
if (document.createEventObject){ 
// dispatch for IE 
try { 
     var evt = document.createEventObject(); 
     jQuery(element).change(); 
     return element.fireEvent('on'+event,evt); 
} catch(e) { }     
} 
else{ 
// dispatch for firefox + others 
var evt = document.createEvent("HTMLEvents"); 
evt.initEvent(event, true, true); // event type,bubbling,cancelable 
return !element.dispatchEvent(evt); 
} 
} 
+0

jQueryカルマを広めておいた方がいいです。 –

関連する問題