新开博客,欢迎光临

在使用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 %>' + '_'; 作为前缀去标示当前模块下的控件,即可避免冲突

posted on 2008-07-17 11:00  三宝闪耀  阅读(288)  评论(3编辑  收藏  举报

我们的邮箱: dnnsoft@163.com