【问题标题】:javascript input field get cleared when page postback页面回发时,javascript输入字段被清除
【发布时间】:2014-05-01 10:19:51
【问题描述】:

我正在使用 VB ASP.net 和后端作为 SQL,我必须从日历中选择日期,因为我使用 javaScript 日历作为客户端编码和其他控件,当我的页面得到回发时,我丢失了日历值我被选中了,但我必须保留日期,直到我点击保存按钮这里是 TextBox Input

<input name="txtpodate" id="inputField00" type="text"  
                      style="width:28px; font-family:Segoe UI; font-size:14pt; height: 20pt; background-color: #3366FF;" 
                       onclick ="a();" />

我使用了 Hidden Field 、 onblur 、 onFocus 事件,但它不起作用,

日历功能是

    <link rel="stylesheet" type="text/css" media="all" href="jsDatePick_ltr.min.css" />

<script type="text/javascript" src="jsDatePick.min.1.3.js" ></script>

 <script type="text/javascript" id ="calender">

        function setCurrentDate() {

            var d = new Date();
            var month = new Array();
            month[0] = "JAN";
            month[1] = "FEB";
            month[2] = "MAR";
            month[3] = "APR";
            month[4] = "MAY";
            month[5] = "JUN";
            month[6] = "JUL";
            month[7] = "AUG";
            month[8] = "SEP";
            month[9] = "OCT";
            month[10] = "NOW";
            month[11] = "DEC";

            var mnth = month[d.getMonth()];
            var convertedStartDate = new Date();
            var day = convertedStartDate.getDate();
            var year = convertedStartDate.getFullYear();
            var shortStartDate = day + "-" + mnth + "-" + year;

           document.getElementById("inputField00").text = shortStartDate;
           document.getElementById("inputField").value = shortStartDate;
           document.getElementById("inputField0").value = shortStartDate;


        }


function a() {

            new JsDatePick({
                useMode: 2,
                target: "inputField00",
                dateFormat: "%d-%M-%Y"


            });

            new JsDatePick({
                useMode: 2,
                target: "inputField",
                dateFormat: "%d-%M-%Y"

            });
            new JsDatePick({
                useMode: 2,
                target: "inputField0",
                dateFormat: "%d-%M-%Y"

            });

            setCurrentDate();

        };


      </script>            
    </asp:Content>

有人可以帮帮我吗?

【问题讨论】:

  • 考虑改用 asp.net 日历控件。 :)
  • 谢谢 Lim,但是 asp.net 日历太大了,占用了太多空间。我可以在 onclick 事件中像弹出一样使用日历吗?可以吗?

标签: javascript jquery html asp.net vb.net


【解决方案1】:

如下修改您的输入标签以添加 runat=server

<input runat="server" name="txtpodate" id="inputField00" type="text"  
                      style="width:28px; font-family:Segoe UI; font-size:14pt; height: 20pt; background-color: #3366FF;" 
                       onclick ="a();" />

然后编辑脚本以从输入字段中获取新生成的 clientID

document.getElementById("<%= inputField00.ClientID  %>").text = shortStartDate;

new JsDatePick({
                useMode: 2,
                target: "<%= inputField00.ClientID  %>",
                dateFormat: "%d-%M-%Y"
            });

【讨论】:

  • 如果我把 runat="server" 表示它没有显示日历
  • 检查编辑的答案,我也忘记更改 a() 函数内的代码。
  • 它的工作非常感谢...:):)
  • 这是最终代码
【解决方案2】:

默认情况下,HTML 表单字段在回发后不会保持其状态,因为 HTTP 是无状态的。您可以做的是创建一个隐藏值(您已经尝试过)并从 C# 设置它的值。在您的文档加载的 Javascript 中,检查隐藏字段是否有值,如果是,请将日历设置为它,否则什么也不做。

  1. 在你的 .aspx 页面中添加一个隐藏字段:

    <asp:HiddenField ID="hidden" runat="server" />
    
  2. 在您的代码隐藏中更改此字段的值:

       protected void Page_Load(object sender, EventArgs e)
       {
       hidden.Value = CurrentDate;
       }
    
  3. 编写以下脚本来访问该值并将其放入任何变量中:

    <script type="text/javascript">
        if (document.getElementById("MainContent_hidden") != undefined) {
            var hiddenVal = document.getElementById("MainContent_hidden").value;
            document.getElementById("inputField00").text = hiddenVal;
            document.getElementById("inputField").value = hiddenVal;
            document.getElementById("inputField0").value = hiddenVal;
        }
    

【讨论】:

  • 谢谢 Ash,我不知道如何从后面的代码中设置日历值,我尝试了 Response.Write("txtpodate") 但它不起作用,您对此有任何想法吗?
  • 我创建了一个隐藏字段,例如 我在 VB 中工作,所以在页面加载中我添加了 Hidden1.Value = DateTime.Today() 并在源代码方面添加了 if (document.getElementById("Hidden1") != undefined) { var hiddenVal = document.getElementById("Hidden1").value; document.getElementById("inputField00").text = hiddenVal; document.getElementById("inputField").value = hiddenVal; document.getElementById("inputField0").value = hiddenVal; }
  • 否 我也想保存用户选择的日期
  • 我在 VB 中工作,所以在页面加载中我添加了 Hidden1.Value = DateTime。 Today() 和源代码方面我添加了 if (document.getElementById("Hidden1") != undefined) { var hiddenVal = document.getElementById("Hidden1").value; document.getElementById("inputField00").text = hiddenVal; document.getElementById("inputField").value = hiddenVal; document.getElementById("inputField0").value = hiddenVal; }
【解决方案3】:

尝试在您的标记中覆盖您的 pageLoad 事件。

function pageLoad(sender, args)
     {
      setCurrentDate();

     }

这将在回帖后重置日期。让我知道这是否有效。

【讨论】:

    【解决方案4】:

    将 runat="server" 添加到您的输入中!

    【讨论】:

    • 如果我把 runat="server" 它不显示日历
    • 你能详细说明你的答案吗?
    • 对于要传递给服务器的值,他操作需要将 runat="server" 添加到输入字段,否则数据将不会发送到服务器,并且没有办法它在回邮后出现。这是合乎逻辑的第一个查看位置。
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多