javascript - 是否可以使用内联 javascript 来实现小型自包含事件处理函数?

标签 javascript event-handling inline

我使用事件来管理用户登录和退出网站后的用户界面,登录时发布登录事件,用户注销时发布注销事件。

有了这个系统,我正在尝试使用 JavaScript 的小型内联位来处理订阅事件的 ui 元素。

页面顶部是登录/注销链接,因此我使用以下代码来更改登录状态

<div id="account_panel" class="signed_out">
    <div class="in">
        <a href="/account" class="name"></a> | <a href="/account/signout">Sign-out</a>
    </div>
    <div class="out">
        <a href="/account/signin" class="signin">Sign-in</a> | <a href="/account/register" class="register">Register</a>
    </div>
</div>
<script>
    if (window.jQuery) {
        $('body').on('login.account.website', function(event, data){
            $('#account_panel').removeClass('signed_out').addClass('signed_in');
            if (data)
                jQuery('#account_panel .name').text(data.first_name+' '+data.last_name);
        });
    }
</script>

我有几段这样的代码,其想法是它们都是独立的,不会影响或直接依赖于其他事物,javascript仅与它旁边的代码相关,因此将它们放在一起似乎是明智的。

html 的初始状态是在服务器端生成的,以便网站无需 JavaScript 即可运行,这样的代码片段也包含在其自己的模板文件中。

我想继续对网站上的各种元素使用此方法,但我有兴趣了解是否应该使用更好的可维护方法。

谢谢

最佳答案

我认为这种方法很难维护,必须跟踪分散在多个 html 文档中的代码片段。为什么不将代码保留在一处并仅在存在某些 DOM 元素时才绑定(bind)到事件:

if (window.jQuery) {
  function whenSignedOut(){
    $('body').on('login.account.website', function(event, data){
       $('#account_panel').removeClass('signed_out').addClass('signed_in');
       if (data)
           jQuery('#account_panel .name').text(data.first_name+' '+data.last_name);
    });
  }

  function whenSignedIn(){  
  }
}

if (window.jQuery) {
  $(document).ready(function(){
    if($('div#account_panel.signed_out').length > 0)) {
      whenSignedOut();
    }

    if($('div#account_panel.signed_in').length > 0)) {
      whenSignedIn();
    }
  });
}

关于javascript - 是否可以使用内联 javascript 来实现小型自包含事件处理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225403/

相关文章:

javascript - 如何替换 DOM 节点并将其包装起来?

php - 如何使用 MySQL 制作手动 'like' 函数(如 facebook)

javascript - 我们如何处理来自错误的不同 HTTP 响应?

wpf - 用于非路由事件的 EventSetter?

c++ - 如何使用 Rcpp 和内联设置 g++ 编译器标志?

javascript - PHP计算字符串中字符的唯一性和出现次数

javascript - slim 3 : Event Handling not Working as Expected

javascript - 当页面实际上没有滚动时如何检测鼠标滚动(因为它太小了)

c++ - 定义和声明中的内联

CSS - 抓取元素并内联显示它们(绝对定位?)