1

<a href="..そのため、ページにいくつかのタグがあり、それらにはインラインonclick属性があります。ユーザーが1つをクリックしてログインしていない場合は、ログインするように求められます。その後、ページの更新でjqueryが要素に対して起動.click()<a>、ユーザーが最初に移動したい場所に移動します。

ポップアップブロッカーの問題のため、jqueryがトリガーされた場合.click()に同じウィンドウでリンクを開く場所に移動しました。

ただし、ユーザーがすでにログインしている場合は、リンクをクリックして新しいタブで開きたいと思います。これは私が持っているコードで、Chromeで正常に機能していますが、FireFoxはそれに腹を立てています-「イベントは未定義です」と言います。

 <a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, e)


function genericActionComplete(actionId, ctl, url, markComplete, e) {
    if(event.x != null){   // User Clicked - open url in new tab  
         window.open(url);
    }

    else{    // Click performed by script after logIn , open in same tab to prevent Pop-Up Blocker

     window.location = url;   
    }
}

合格thisして、Firefoxで運が悪かったeだけで使用eventしてみました。ユーザーがマウスでリンクをクリックすると値が表示されるため、event.xをチェックしています。

4

2 に答える 2

1

もちろん、イベントは未定義です...関数に渡される最後のパラメーターはイベントでありe、関数定義の変数によって参照されます。

function genericActionComplete(actionId, ctl, url, markComplete, e)

しかしe、引数として HTML を渡してもeventオブジェクトは渡されませんevent。変化する

<a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, e)">
<!-- ===================================================================================/\

<a href="#" onclick="genericActionComplete('12345', this, 'http://www.myurl.com', false, event)">
<!-- ===================================================================================/\

そして、あなたは大丈夫なはずです。コードが chrome で動作していた理由は単純です。可能な限り互換性と寛容性を持たせるために、chromeにはwindow.event昔の IE のようにプロパティがあります。関数の最初の行が間違っているため:

if(event.x != null){//should be e.x

JavaScript のスコープ スキャンは、FF ではなく IE と chrome で機能する - に解決eventされます。 そこにあるすべての主要なブラウザーで問題ないはずですが、安全を確保したい場合は、次の行を関数に追加してから、次を確認してください。window.event
e.x

e = e || window.event || {x: null};
于 2013-03-22T15:41:04.047 に答える
0

目立たない javascriptを使用するのはどうですか? 目立たない JavaScriptと目立たない JavaScript の違いとHTML で onClick() を使用するのはなぜ悪い習慣なのですか? を参照してください。

そうすれば、他のきれいなことを「あえて」行うことさえできます。

バニラ JavaScript でどのように処理するかはわかりませんが、以下は jQuery を使用したソリューションです。

jsbin http://jsbin.com/lidobarenaku/1/edit?html,js,console,outputで実際の例を参照してください

HTML:

<a href="#" class="js-hook-for-link">your link</a>
<br><br>
<div class="programmatical-click-on-link">
If you click on this text, the link "your link" will be programmatically triggered.
</div>

邪魔にならない JavaScriptと jQuery:

$('.js-hook-for-link').on('click', function(event, isProgrammaticalClick ){
  event.preventDefault() ; /* link behavior disabled for demo purpose */

  console.log("on click: "+(isProgrammaticalClick || "isHumanAction !" ));

  if ( isProgrammaticalClick ){ /* JS truthy/falsy value usage */
    /* .. do something on programmatical click ... */
    /* window.location = url;  open url in same tab in your case */
  }
  else {
    /* .. do something on human submission ... */
    /* window.open(url); open url in other tab in your case */
  }
});

$('.programmatical-click-on-link').on('click', function(){
  /* programmatically click on link (notice the flag param added) */
  $('.js-hook-for-link').trigger( 'click' , ['isProgrammaticalClick'] );
});

注: この例では jQuery を使用してクラス名に「フック」しますが、プレーンな JavaScript または別の JavaScript セレクター ライブラリ (つまり、 http://sizzlejs.com/https://github.com ) を使用してそれを行うことを妨げるものは何もありません。/ded/qweryなどhttp://jster.net/category/selector-libraries )

于 2014-09-05T12:47:04.967 に答える