【问题标题】:How to trigger a JavaScript event on a target page AFTER the user navigates to that page from another用户从另一个页面导航到该页面后如何在目标页面上触发 JavaScript 事件
【发布时间】:2014-06-11 11:20:48
【问题描述】:

当我转到其他页面时如何触发 javascript(或 jquery)事件?

例如:

  • 我在 index.html
  • 在index.html,我点击了contact.html链接;
  • 当我进入contact.html页面时,我需要触发一个事件

感谢您的关注

编辑:

我会尝试用其他方式解释:

我正在使用 RubyOnRails。我有一个可以添加联系人的页面。有很多字段,但在这个例子中我只使用两个:

<select name='type' id='type_select'>
    <option value='0'></option>
    <option value='1'>Home</option>
    <option value='2'>Work</option>
</select>
<input type="text" name="contact_name" id="contact_name_input">

在我的 Javascript 上,我有:

// this only works if I press CTRL+F5 to refreash the page
$(document).ready(function(){
    $("#contact_name_input").hide();
});
// This Works fine
$('#type_select').change(function(){
    if ($(this).val() == 1 || $(this).val() == 2){
        $("#contact_name_input").show();
    } else {
        $("#contact_name_input").hide();
    }
});

换句话说,我需要的是在用户访问页面时隐藏输入字段,并仅在他选择了有效类型时才显示。

我希望更清楚

感谢您的关注

【问题讨论】:

  • 据我了解stackoverflow.com/a/7080331/2260614 可能会有所帮助..!!
  • kapa 和@ElmoVanKielmo .. 这个问题与您建议的问题不重复。我的问题是不同的。当我第一次访问页面时,会调用 document.load 事件。但是在同一个站点,如果我单击另一个页面,则不会再次调用此 document.load。我必须刷新页面(CRTL+f5)才能再次调用 document.load 事件
  • @PSantos 如果有其他详细信息/示例代码可以添加到您的问题中以改进它,请这样做。
  • 嗨@xDaevax,让我尝试更详细地解释我想要什么:-我有一个页面:contact.html.erb,在那个页面上我有一个div:`
    ....
    ` - 在我的“app/assets/javascript/application.js”我有这个代码:` $(document).ready(function(){ $("#message_box"). hide(); } ` 如果我第一次访问 localhost:3000/contacts/contact,javascript 工作。如果我按 CTRL+F5 它也工作,但如果我来自其他页面,如 localhost:3000/contacts/索引它不起作用
  • 用 CSS 隐藏它并仅在更改事件中显示它怎么样?

标签: javascript jquery html events


【解决方案1】:

您似乎希望在目标页面上触发一个事件(在用户单击链接之后)并被带到目标页面。如果是这种情况,并且您想触发特定事件,正如其他人所建议的那样,您的第一个入口点可能是新页面的 document.ready,您可以使用查询字符串来指定更具体的事件。

在 Index.html 上

<a href="contact.html?e=1">Contact</a>

在 Contact.html 上

<script type="text/javascript">
    $(function() {

        $(document).bind("myCustomEvent", function(e, data) {
            alert("Weee, you triggered event id: " + data.EventId + "!");
        });

        var eventId = getParameterByName('e');  // Load the query string specified by the previous page's link
        if(eventId == 1) {
            $(document).trigger("myCustomEvent", {EventId: eventId});
        } else {
        } // end if/else
    });

    function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    }
</script>

Credit -- Javascript QueryString 函数无耻地取自这里: How can I get query string values in JavaScript?

在聊天中发布@xDaevax 给出的解决方案:

通过在 $(document).ready(); 上使用 JQuery;要隐藏输入,您有时会看到闪烁。 您可能需要考虑在输入中添加一些 CSS 以隐藏它 然后,当您访问该页面时,它将始终被隐藏。 当你使用 JQuery 的 show() 和 hide() 时,它们会根据你调用 show() 还是 hide() 将“display”css 属性从“display: block”更改为“display: none” 因此,在您的 javascript 中,您可以尝试:

$("#type_select").change(function(e) {
    var selectedValue = $(this).val();
    if(selectedValue <= 0) {
        $("#contact_name_input").hide();
    } else {
        $("#contact_name_input").show();
    }
});

对我有用

【讨论】:

  • 或许回答否决选民能详细说明原因?我的回答有什么可以改进的地方吗?
  • ElmoVanKielmo 如果问题不清楚,我很抱歉。我是安哥拉人,我的英语不太好。
  • 所以要明确一点,不是根据当前对问题的理解给出答案的准确性,而是在需要改进的问题上给出答案的原则引起了反对?也许我错过了问题中不清楚的部分。
  • @xDaevax 是的。我们不应该欣赏这样的问题。没有研究努力。没有代码示例。 请为我编写代码不是我们想要的。对此类问题的回答意味着没关系。实际上这个问题是重复的。我已撤销对您的回答的反对票,因为我希望您现在明白原因。
  • @PSantos 让我们聊聊,不要在这上面填满 cmets。 chat.stackoverflow.com/rooms/55433/room-for-xdaevax-and-psantos
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多