【问题标题】:Show bootstrap modal when url has some parameters当 url 有一些参数时显示引导模式
【发布时间】:2019-10-22 15:38:46
【问题描述】:

我是开发网络应用程序的新手,我正在创建一个具有简单注册、签名系统的迷你项目,我不希望用户转到其他页面登录,而是使用了 @987654321 @ 有一个登录表单,我有一个按钮,单击该按钮也会更改 url 并触发模式。现在我只想显示模式,如果 url 有参数 = ?action=login

首先,我尝试了document.getElementById('#myBtn').addEventListener('click', setQry) 到我的按钮,该按钮调用在单击时更改url 参数的函数。点击时 url 参数变化非常好,但模式没有显示,请注意我的按钮上有 data-targetdata-toggle 属性以显示模式。我也试过this example。但它不起作用。

我只是想实现那个模式应该出现,如果 url 有参数 在登录成功时,我想隐藏模式并删除 url 参数。

这是我的 HTML:

<button type='button' id='toggle-modal' data-toggle='modal' data-target='#login-modal'></button>

我的 JavaScript:

document.getElementById('#toggle-modal').addEventListener('click', setQry);
function setQry() {
    const url = new URL('http://localhost/learning%20php/practice%20programs/login%20system/');
    var qry_params = new URLSearchParams(url.search);
    if (!qry_params.has('action', 'login')) {
        qry_params.set('action', 'login');
        window.location.search = qry_params;
    }
    if (window.location.search == qry_params) {
        $('#login-modal').modal('show');
    }
};

【问题讨论】:

  • 抱歉,我在 url 参数 ?action=login 处有错字。
  • 感谢曼努埃尔的编辑。

标签: javascript jquery twitter-bootstrap bootstrap-modal


【解决方案1】:

考虑为此使用 PHP。您可以在 PHP 中获取 GET 参数,然后根据获取参数更改内容。

<?php

if ($_GET['action'] == "login")
{

?> 

<!-- Add content in html if action code is set to "login" --> 

<?php

}

else
{ 
....

} 

?>

【讨论】:

    【解决方案2】:

    这段代码应该可以工作,你的处理程序只在点击时触发,它对页面加载没有影响,因此,应该调用它来处理页面加载时的参数,对不起我的英语不好

    setQry();
    
    function setQry() {
        const url = new URL('http://localhost/learning%20php/practice%20programs/login%20system/');
        var qry_params = new URLSearchParams(url.search);
        if (!qry_params.has('action', 'login')) {
            qry_params.set('action', 'login');
            window.location.search = qry_params;
        }
        if (window.location.search == qry_params) {
            $('#login-modal').modal('show');
        }
    };

    【讨论】:

      【解决方案3】:
      1. 单击按钮时会调用该事件两次。所以我从按钮中删除了其他属性。 <button type='button' id='toggle-modal' ></button>
      2. document.getElementById('#toggle-modal').addEventListener('click', setQry); 中使用的 # 也造成了问题。

      3. 在 javascript qry_params.set('action', 'login'); 中设置参数正在刷新页面。这样弹出窗口就会关闭。

      所以下面给出了更新代码希望它能解决问题 ``'`

      <button type='button' id='toggle-modal' ></button>
      
      
      <script>
      document.getElementById('toggle-modal').addEventListener('click', setQry);
      function setQry() {
      
      const url = new URL('http://localhost/learning%20php/practice%20programs/login%20system/?action=login');
      var qry_params = new URLSearchParams(url.search);
      if (window.location.search.replace("?", "") == qry_params) {
              $('#login-modal').modal('show');
          }
      
      }; </script>
      

      【讨论】:

      • 您是否在浏览器网址中添加了?action=login
      • 终于可以工作了,但是以一种奇怪的方式,模态在第二次点击时被激活。如果你能解决第二次点击的问题,那就太好了,这是我的代码 function setQry() { var url = window.location.href.toString(); var qry_str = '?action=login'; if (url.endsWith(qry_str) == false) { window.location.search = qry_str; } if (window.location.search == qry_str) { $('#login-modal').modal('show'); } }
      • 我检查了您的代码,首先单击浏览器 url 中的设置查询字符串,然后单击弹出窗口。因此,如果您删除 if (url.endsWith(qry_str) == false) { window.location.search = qry_str; } 并在浏览器 url 中使用 ?action=login,它将按您的预期工作。
      • 试试这个代码,它将解决你的问题 function setQry() { var url = window.location.href.toString(); var qry_str = '?action=login'; if (url.endsWith(qry_str) == false) { if (window.history.pushState) { const newURL = new URL(window.location.href); newURL.search = '?action=login'; window.history.pushState({ path: newURL.href }, '', newURL.href); } } if (window.location.search == qry_str) { $('#login-modal').modal('show'); } }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多