在DNN下使用JAVASCRIPT使多个模块间不互相干扰

本文探讨了在使用JS客户端处理模块时遇到的问题,即当页面出现多个相同模块时,JS代码通常只会正确处理第一个模块。文章提供了两种解决方案:一种是通过调整代码逻辑来直接寻找特定元素;另一种是使用唯一标识符来区分不同实例下的元素,有效避免冲突。

在使用JS客户端处理,提醒些问题时, 总是会有这种问题,当一个页面出现多个你定义的模块,代码总是寻找到第一个出现的, 例如如下

JS部分:
        var ChangeCustomer =null;

  function CustomerIDChange(sPARENT_ID,sPARENT_NAME)
  {
   document.getElementById('<%=txtCustomerID_ID.ClientID %>').value=sPARENT_ID;
  
   document.getElementById('<%=txtCustomerID_NAME.ClientID %>').value=sPARENT_NAME;
   
   
  }
  function PopupCustomerID()
  {
   ChangeCustomer=CustomerIDChange;
   return window.open('<%=this.ModulePath %>../VAP.Modules.Customer/PopupCustomer.aspx' ,'PopupCustomerID','width=600,height=400,resizable=1,scrollbars=1');
  }


HTML部分:
<td class="SubHead" width="125">
                        <dnn:Label ID="lblCustomerID" runat="server" ControlName="lblCustomerID" Suffix=":" />
                    </td>
                    <td style="width: 526px">
                        <input id="txtCustomerID_ID" runat="server" style="width: 34px" type="hidden" />
                        <input id="txtCustomerID_NAME" runat="server" readonly="readonly" style="width: 268px"
                            type="text" /><input id="btnCustomerID" onclick="return PopupCustomerID();" type="button"
                                value="查找" />
                    </td>


实际应用中,如果这个模块代码被应用多次,那么<%=txtCustomerID_ID.ClientID%>  总是找到第一个出现的,实践证明这并不是最好的方法.
正确的应该是这样.

JS部分:

<script type="text/javascript">
<!--
    var sSelectNameUserContext='';
 var sModuleTag='<%=this.ClientID %>' + '_';
    function ItemPriceChanged(fldValue)
 {
        var fldAjaxErrors=document.getElementById(sModuleTag+ 'AjaxErrors');
       
        if (fldValue.value!='')
        {
            var nValue = parseFloat(fldValue.value);
            if (isNaN(nValue))
            {
                fldAjaxErrors.innerHTML='必须为数字,请检查';
            }
        }
       
 }

//-->
</script>

HTML部分
<EditItemTemplate>
       <asp:TextBox ID="month1" runat="server" Text='<%#Bind("month1") %>'  onblur="ItemPriceChanged(this);"></asp:TextBox>
   </EditItemTemplate>
--这段代码是验证用户输入,只允许他输入货币值,如果错误,用下面span提醒他.
<span id="AjaxErrors" runat="server" class="NormalRed" style="text-align: left"></span>

我们使用 var sModuleTag='<%=this.ClientID %>' + '_'; 作为前缀去标示当前模块下的控件,即可避免冲突

转载于:https://www.cnblogs.com/dnnsoft/archive/2008/07/17/1245031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值