小弟遇到如下问题:
小弟用了一段JavaScript制作了一个日期下拉选择的控件
(一个textbox用来获得日历div内的选择的值,一个按钮,点了之后出现装有日历js的div)
<input type="text" id="xzrq" name="xzrq" runat="server" size="26" maxlength="19"> 
<input type="button" name="change" value=".." onclick="show_date(change,'','',xzrq)">
小弟想实现的是:
当点击客户端按钮change,然后选择了日期,此时需要日期计算一些值(通过选择日期变更来得到的值)。
但是小弟发现,当小弟选择了div内日历内的值后,值传递到xzrq控件内,
值改变了,却没发生xzrq控件的“onChange”事件,
小弟又手工改了xzrq控件内的日期值,这时是可以触发“onChange”事件。
如果用onBlur事件是能成功触发的(但是不合适用,因为他是在焦点离开后才得到不是当前的选择日期的值,而是本次的上一次的值)。
----------------------
现在文本框id="xzrq" name="xzrq" 不能成功触发onChange事件,onBlur事件也不能用,请教各位,应该怎么处理~~~
如果觉得小弟描述不清楚的,请指出,小弟重新描述,谢谢~~~

解决方案 »

  1.   

    只是用脚本给input text赋值不会触发onchange事件
    如果一定要触发在赋值语句后加- 
    document.getElementById('xzrq').onchange()
      

  2.   

    to seedling_lq(拒绝不要的留下来的就是我要的)
    仍然还是不行哦,焦点是离开了,他仍然不触发onChange事件。
    后台代码
     xzrq.Attributes.Add("onChange", "bb();")
    页面js代码
    function bb()
    {
     document.all.Label11.innerText = document.getElementById('Calendar1').value;
     document.getElementById('Calendar1').onChange();
    }
    都触发不了他的onChange,前台的js还怎么执行呢~。
      

  3.   

    xzrq.Attributes.Add("onChange", "bb();")
    ==>
    xzrq.Attributes.Add("onchange", "javascript:bb();")
    ||
    xzrq.Attributes.Add("onperprotychange", "javascript:bb();")
      

  4.   

    to kkun_3yue3(嘟啊嘟啊嘟啊嘟)
    js我不是很懂,
    是不是想表述js运算符优先级别,
    呵呵,但是还是没解决小弟的问题~~~~小弟的问题是用js写了日历的选择日期的效果,
    选择后值在textbox中显示,
    遇到的问题是这个textbox不管得到了焦点还是失去了焦点都不触发onChange事件,
    请各位指点如何解决或者变通的方法
      

  5.   

    换成onpropertychange 应该就OK了~
      

  6.   

    当小弟选择了div内日历内的值后,值传递到xzrq控件内,
    值改变了,却没发生xzrq控件的“onChange”事件,
    小弟又手工改了xzrq控件内的日期值,这时是可以触发“onChange”事件。
    ------------------------------------------------------------------------
    一直理解为你要触发xzrq的onchange事件
    从你的代码里看document.getElementById('Calendar1').onChange();又去触发
    Calendar1??你到底是要谁改变了触发了谁啊??
      

  7.   

    还是不行哦,请在指教指教~
    前台生成代码:
    <input onfocus="setday(this);" name="xzrq" type="text" value="2007-09-25" id="xzrq"  onperprotychange="javascript:bb();" />
    后台代码:
    xzrq.Attributes.Add("onperprotychange", "javascript:bb();")
    //js:
    <script language="javascript">
    function bb()
    {
    document.all.Label11.innerText = document.getElementById('xzrq').value;
    document.getElementById('xzrq').onperprotychange();//这个实验过
    //document.getElementById('xzrq').onChange();//这个也实验过~~~
    }
    </script>请再指教~~
      

  8.   

    to seedling_lq(拒绝不要的留下来的就是我要的) 
    需要改变了Calendar1后触发onChange事件
    问题是他不触发~~~
    (ps: Calendar1控件就是代码的xzrq控件~~)
    ~~~~~~~~~~~~~~~~~~~~~~~~
      

  9.   

    你先把其他的去了,留下面的试试
    埃,还得去猜你到底要干什么,真累<input onfocus="setDay(this)"  name="xzrq" type="text" value="2007-09-25" id="xzrq" onchange="bb();" /><script type="text/javascript">
        function setDay(obj)
        {
            obj.value = "2007-19-25";
            obj.onchange();
        }
        
        function bb()
        {
            document.all.Label11.innerText = document.getElementById('xzrq').value;
        }
        
        </script>
      

  10.   

    OnChange
    OnChange事件要在失去焦点之后触发,只有当用户修改了文本框中的文本,然后失去焦点后才触发,如果用户没有修改文本,失去焦点 时是不会触发OnChange事件的。我获得值是点击div层内的日历后得到值,此时焦点是已经离开了Calendar1(或者是xzrq)控件了,点击了之后值才赋值到Calendar1(或者是xzrq)控件内。(按照我的理解是不是已经失去了触发onChange的时机??不知道是不是对的)。
    ~~~~~~~~~~~~~~~~~~~~~~
    如果我用键盘直接输入,那是能触发onChange的事件的。
    请再指教一下
      

  11.   

    输入框onChange事件也是要在焦点离开输入框的焦点后才能引发,onperprotychange更加不行。所以用JS给输入框赋值不会引发onperprotychange和onchange事件。如果你的xzrq是服务器端控件,就这样引发它的onchange事件:obj = document.getElementById("<%=xzrq.ClintID>");obj.onchange.call(obj);
      

  12.   

    如果我用键盘直接输入,那是能触发onChange的事件的。
    -----------------------------
    哦,为什么我这样用键盘也不能触发事件了?<input type="text" id="txt1" onchange="alert('change');" />
      

  13.   

    to seedling_lq(拒绝不要的留下来的就是我要的) :
    你给我的代码测试成功的,
    得到焦点的时候对label控件的innerText成功赋值了。
    ~~
    我再品味一下~
      

  14.   

    to:BearRui(AK-47)(奋斗目标:农妇,山泉,有点田)
    <input name="TextBox1" type="text" id="TextBox1" onChange="alert('aaa')" />?
    不可以吗?
    能成功触发啊?
    他符合要在焦点离开输入框的焦点后才能引发的条件啊~?
    请指教~
      

  15.   

    onChange(),只有内容改变且输入焦点转移才能发生
      

  16.   

    我明白你的意思。我刚刚解决了。
    其实只要在你的如期选择控件里加一个激发onchange事件的函数就可以了。
    比如:
    你的选择时间的控件肯定要给文本框返回值的:xzrq.value=“2010-11-11”;
    你只要在这行代码后面再加一个激发onchange事件的函数:xzrq.onchange();xzrq.value=“2010-11-11”;xzrq.onchange();
    然后在文本框中写上onchange=“alert('执行了');”;
      

  17.   

     <asp:DropDownList ID="DropDownList1" runat="server" onchange="phall1();"死循环??