0

您好我一直在 .aspx 页面上测试以下 javascript 代码:我需要部署它以在子布局 .ascx 上运行。现在,我知道我可以在标签之间添加我的 javascript,但是当我在 .aspx 页面上运行它时,我还使用“onload”属性和 SetTimeOut 根据特定的加载条件运行了 Javascript ......我想我可以让 JS 在他的 .ascx 页面上运行,但是我如何让 onload 在 .ascx 中工作:这是代码:

<script type="text/javascript">


      function showModal() {

      <%
       RoleItem roleItem = MeauUserSecurity.GetSupportCenterUserRole(Sitecore.Context.User);
          if (roleItem.ID == RoleItem.GetEmployeesRole().ID || roleItem.ID == RoleItem.GetSupportCenterAdministratorRole().ID)
            { 


     %>
        var url = document.URL;
      //  var popUp = '<%=Url %>/components/supportcenter/feedback.aspx?value=';
        var popUp = 'http://local.meau.com/components/supportcenter/feedback.aspx?value=';
        var site = popUp + url;
        var runpopUp = 50;
        if (runpopUp >= Math.random() * 100 ) {
        $(document).ready(function () {
            $.fancybox({
                'width': 500,
                'height': '55%',
                'autoScale': false,
                'transitionIn': 'none',
                'transitionOut': 'none',
                'type': 'iframe',
                'href': site,
                'showCloseButton': false,
                'title': 'We Request your Feedback'

            });

        });
        }
       <%
     }
      %>
    }





    // If the user tries to exit, run showModal
  //  window.onbeforeunload = showModal();
</script>
4

1 回答 1

0

我认为你在这里遵循一个非常糟糕的模式......你最好分开你的JS和你的内容。下面的示例使用 jQuery 处理事件...

<%-- MyAscxName.ascx 
    Set a class for the ascx, and add in a property from the ascx's code behind definition
--%>
<div class="MyAscxName" data-someprop="<%:SomePropertyValue%>" >
  ..other controls...
  <asp:Button ... CssClass="ActionButton" />
</div>

在您的母版页中,公开应用程序的基本路径。

<script>var basePath = '<%=Url.Content("~/")%>';</script>

然后,您可以将相关的 JS 包含在站点的 JS 包中,或者站点的该部分...

//MyAscxName.js
(function($){

  $(document).ready(initialize);

  function initialize() {
    var instances = $(".MyAscxName");
    //check for instances of your control...
    if (instances.length == 0) return; //no instances of said control

    //delegate events for internal items
    instances.delegate('.ActionButton','click',handleActionButtonClick);

    instances.each(function(){
      var instance = $(this); //rewrap single instance in jquery object
      if (instance.attr("data-someprop") == "go") {
        //do something here
      }
    });
  }

  function handleActionButtonClick(e) {
    //example url construction
    var url = basePath 
      + 'components/supportcenter/feedback.aspx?value=' 
      + encodeURIComponent(location.toString())
      ;

    //do something...
  }
}(jQuery))

通过遵循上述约定,您可以全局包含脚本,或者为该部分包含脚本,并依赖 ascx 的标记进行事件绑定。

于 2013-06-07T22:46:48.280 回答