当URL在加载时包含特定参数时,如何调用此javascript?

时间:2013-08-03 09:24:26

标签: javascript ruby-on-rails ruby-on-rails-3

此功能启用它自动输入值,并在点击链接时跳转到输入框的位置 它运作良好。

<% if current_user %>
    <% content_for(:head) do %>
        <%= javascript_tag do %>
            jQuery(document).ready(function () {

                $(document).on('click', 'a#user', function()  {
                    $(".box#input").val($(this).attr('value'));

                    var input = $(".box#input");
                    $(document).scrollTop(input .offset().top - 45);
                    input.focus();          
                });

        <% end %>
    <% end %>
<% end %>

而不是点击,我想要在加载页面时完全相同的操作,并且其网址包含此参数mode=1,就像这样example.com/foo?mode=1

我该怎么做?

2 个答案:

答案 0 :(得分:2)

首先:当您使用jQuery(document).ready()时,您的页面已经加载,执行以下代码时。

第二:location.search包含?之后的所有网址 要解析它,请参阅Get escaped URL parameter

总结一下:

    <%= javascript_tag do %>
      function getURLParameter(name) {
        return decodeURI(
          (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
        );
      }

        jQuery(document).ready(function () {

            $(document).on('click', 'a#user', function()  {
                $(".box#input").val($(this).attr('value'));

                var input = $(".box#input");
                $(document).scrollTop(input .offset().top - 45);
                input.focus();          
            });
            if (getURLParameter('mode')==1) {
                var input = $(".box#input");
                $(document).scrollTop(input .offset().top - 45);
                input.focus();          
            }
        });
    <% end %>

在您完成所有评论之后,我编写了一个示例页面,其中包含您的代码段并且可以正常运行:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="includes_js/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
function getURLParameter(name) {

    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
      );
    };

      jQuery(document).ready(function () {
        // alert(location.search);
        var mode=getURLParameter('mode');
        // alert(mode);
          if (mode==1) {
              var input = $(".box#input");
              $(document).scrollTop(input .offset().top - 45);
              input.focus();          
          }
      });

</script>
</head>
<body>
<form>
<input name="t1" /><br>
<input name="t2" class="box" id="input" />
</form>
</body>
</html>

对我来说,你的选择器很奇怪。你真的有class="box" id="input"的标签吗?特别是我的身份似乎很奇怪。

答案 1 :(得分:1)

body标记中,您可以调用onload属性的函数。这适用于任何网页,包括具有更多参数的网页,例如“http://xyz.com?mode=1&median=1&nothing=0” 例如

<script type="text/javascript">

//You can use the parameters like this
var parameters = window.location.search;

//Parameters will have the value parameters="?mode=1&median=1&nothing=0" 
//Use this to extract "mode=1" (or split it even further) from the string using regex or string methods 
//Lets call this - var extracted 
if (extracted == "mode=1"){
//do whatever else you want with Javascript
}  

</script>
<body onload="yourJsFunction">
<!--your html goes here-->    
</body>