2017-01-31 8 views
2

ユーザーがonclickを特定のページ "user/logged_in1"にリダイレクトしたい場合は、そのページにリダイレクトしてから、リダイレクト後に特定のボタンをクリックする必要があります。このボタンはモーダルを開きます。Javascriptの変更先のhrefと特定のボタンをクリック

は、この機能では動作しません:

function redirect_to_logged_in_and_open_modal() { 
    if(window.location.href.indexOf("logged_in") > -1) { 
     return 
    } else { 
     location.href="user/logged_in1"; 
     document.getElementsByClassName("zimmerbtn")[0].click();  
    } 
} 

リダイレクトが発生したため、リストが空になる前に、それはボタンのために、すでに検索さそうです。これを修正するには?

EDIT

これはもう少し複雑です。モーダルは、ユーザーがリダイレクトを使用する場合にのみ開きます。 bodyタグにonloadを使用すると、ページが読み込まれると常にモーダルが開きますが、私はその必要はありません。リダイレクトが発生した場合にのみ、そのモーダルを開く必要があります。

全体のことは、Pythonのフラスコアプリケーションです:

{% if current_user.zahlung_iban == None and have_this_user_a_room != None %} 
     <li><a class="btn mybtn" onclick="redirect_to_logged_in_and_open_modal()" data-toggle="modal" data-target="#premium-special-modal"> Zimmer anbieten </a></li> 
{% else %} 
     <li><a class="btn mybtn" href="{{ url_for('zimmer_einstellen') }}"> Zimmer anbieten </a></li> 
{% endif %} 

リダイレクトボタンになるためのボタンの特定のトリガーがあります見ての通り。クッキーと

EDIT

オーケー加工が可能な解決策のように聞こえます。しかし、私はそれはシンプルに見える本家のボタンは、提案されたコードのどれも働かない、クリックされた後にクッキーを削除する方法を見つけ出すカント:

function redirect_to_logged_in_and_open_modal() { 
    if(window.location.href.indexOf("logged_in") > -1) { 
     return 
    } else { 
     location.href="user/logged_in1"; 
     document.cookie = "redirected_coz_of_click"; 
    } 
} 

$(document).ready(function() { 
    if ($(".logged-in-container")[0]) { 

     var delete_cookie = function(name) { 
      document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
     }; 

     if (document.cookie.indexOf('redirected_coz_of_click') > -1) { 
      document.getElementsByClassName("zimmerbtn")[0].click(); 
      delete_cookie('redirected_coz_of_click'); 
      console.log(document.cookie); 
     } else { 
      console.log("cookie removed"); 
     } 
    } 
}); 
+0

訪問者を別のページにリダイレクトした後、**ページ内の要素にクリックイベントを発生させるにはどうすればよいですか? –

+0

あなたの現在のページであなたの機能が実行されています。ユーザーにリダイレクトしているページではありません。ユーザーがリダイレクトしているページにユーザーが着陸するときに実行される機能(おそらくonLoadイベント)が必要です。 – Strahdvonzar

答えて

0

代わりにクリックを誘発します。 ボディオンロードの方法でのonclick関数を呼び出すを呼び出します。

<body onload="openModal()"> 
1

まだ読み込まれていない要素にはアクセスできません。 location.href = ''を使用すると、ユーザーをページに誘導するだけです。ページがまだロードされていないため、後続のjavascriptはすべて失敗します。

ユーザーをクリックしてページにリダイレクトするとします。ステップ2について

<a href="user/logged_in1">Click Me</a>

、ちょうどあなたがにリダイレクトされているページではJavaScriptを配置します。これは、アンカータグの不可欠のように聞こえます。ページのloadイベントにバインドしてからJavaScriptを実行します。

window.onload = function() { 
    document.getElementsByClassName("zimmerbtn")[0].click(); 
}; 
0

あなたはあなたの最初のページのコンテンツにアクセスしようとしているが、あなたはすでにそのページからユーザーをリダイレクトしているので、これをすることによって達成することができません現在のメソッド。

私はあなたがしようとしていることは、リダイレクト後に次のことを行うことです。あなたのリダイレクトページで

はあなたがクッキーを使用することができ、この

$(document).ready(
    // add the functionality to launch modal here 
); 
1

を達成するために、以下の、使用のjQueryを追加します。

ユーザーがリダイレクトボタンをクリックしてページが読み込まれたときにCookieを設定し、そのCookieが設定されていることを確認してモーダルを開きます。あなたがモーダルを開いて完了したら、クッキーをクリアします。そうすれば、簡単にこれを達成することができます。

+0

私は必要なもののように聞こえる。その達成方法を確認します – Roman

+0

リダイレクトされたページの$(document).ready(function())で確認できます。 –

2

1:リダイレクトURL

user/logged_in1?click=btn_id 

2にパラメータを追加します。パラメータが存在する場合、そのページの着陸では、あなたはそれから確認することができます。

var btnToClickId = getUrlParameter("click"); 

3:https://stackoverflow.com/a/21903119/3514785

だから、あなたはこのようにそれを使用することができます(あなたがしたい場合やJavaScript)jQueryを使ってクリックイベントを発火この方法ここに方法を見つけ

var getUrlParameter = function getUrlParameter(sParam) { 
    var sPageURL = decodeURIComponent(window.location.search.substring(1)), 
    sURLVariables = sPageURL.split('&'), 
    sParameterName, 
    i; 

    for (i = 0; i < sURLVariables.length; i++) { 
     sParameterName = sURLVariables[i].split('='); 

     if (sParameterName[0] === sParam) { 
      return sParameterName[1] === undefined ? true : sParameterName[1]; 
     } 
    } 
}; 

が発見その上にbtn:

$("#"+btnToClickId).click(); 

注意:ページがロードされた後でチェックしたい:

要約

でそう

$(window).on("load",function() { 
    var btnToClickId = getUrlParameter("click") 
    if(btnToClickId) { 
     $("#"+btnToClickId).click(); 
    } 
}); 

:それは

B無意味ですので、あなたのページを編集し、この行document.getElementsByClassName("zimmerbtn")[0].click();を削除:ターゲットページではJSにコピーして `getUrlParameter」メソッドを過ぎて。

C:あなたは代わりにターゲットIDを保存するためのlocalStorageやいくつかのクッキーを使用することができURLパラメータに3

ALTERNATIVE

で指定された後、ウィンドウのloadイベントリスナの内側にURLのチェックを行いますリダイレクトする直前。このプロセス全体をトリガするページからリダイレクトされていなくても、常にターゲットページでクリアするようにしてください。私はLOGGED_INサイトにまだないです場合、私がチェック機能で

onclick="redirect_to_logged_in_and_open_modal()" 

0

私は、このボタンのonclickの()関数を作成しました。そうでない場合はリダイレクトしますが、追加のパラメータをURL ?redirectedに追加します。

次の手順では、logged_inがロードされ、パラメータがURLにある場合、モーダルも開きます。 URLへのparamを追加するアイデアについて

ありがとう@Zuks。

function redirect_to_logged_in_and_open_modal() { 
    if(window.location.href.indexOf("logged_in") > -1) { 
     return 
    } else { 
     window.location.assign("https://www.example.com/user/logged_in1?redirected"); 
    } 
} 

$(document).ready(function() { 
    if ($(".logged-in-container")[0]) { 

     if(window.location.href.indexOf("redirected") > -1) { 
      document.getElementsByClassName("zimmerbtn")[0].click(); 
     } 
    } 
}); 
関連する問題