简体   繁体   English

Onchange不起作用

[英]Onchange doesn't work

Hi guys I know onchange doesn't fire if you fill at textbox programmatically buy how can I make it do this. 大家好,我知道onchange不会被解雇,如果您以编程方式填写文本框,我将如何做到这一点。

I have two textboxes which are readonly and when you click the a date picker shows up. 我有两个只读的文本框,当您单击时,将显示一个日期选择器。

I have startdate and enddate as my textboxes. 我有开始日期和结束日期作为我的文本框。

I want the startdate value to be copied in the enddate value when the startdate value has changed. 我希望startdate值更改时将startdate值复制到enddate值中。

Thank you guys for the help also I am new to javascript and JQuery 谢谢大家的帮助,我也是javascript和jQuery的新手

my code 我的代码

I used this code just to see if i could make hi to popup when i changed the value 我使用此代码只是为了查看当我更改值时是否可以打个招呼

<script>
function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}
</script>

<td width="228" align="left" valign="top" bgcolor="#D8ABAD">From:

    <label for="input1"></label>
    <input type="text" name="startdate" id="startdate" required="required" value="04/12/2014"/>
    <script>
        obj = document.getElementById("startdate");
        Event.observe(obj,'change',function(){alert('hi');});
        fireEvent(obj,'change');
    </script>
</td>
<td width="23" align="center" valign="top" bgcolor="#D8ABAD">To:</td>
<td width="267" align="left" valign="top" bgcolor="#D8ABAD">
    <label for="enddate"></label>
    <input type="text" name="enddate" id="enddate" required="required" value="04/12/2014"/>
</td>

Try using addEventListener() instead Event.observe() and also your fireEvent function is not defined as function, because you dont put function word in front of your function. 尝试使用addEventListener()代替Event.observe() ,并且将fireEvent函数未定义为函数,因为不要将function字放在function前面。

The javascript should be like this javascript应该是这样的

function fireEvent(element,event) { 
    if (document.createEventObject) { // dispatch for IE 
        var evt = document.createEventObject(); 
        return element.fireEvent('on'+event,evt);
    } else { // dispatch for firefox + others 
        var evt = document.createEvent("HTMLEvents"); 
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable 
        return !element.dispatchEvent(evt); 
    } 
}

obj = document.getElementById("startdate");
obj.addEventListener('change',function(){alert('hi');}, false);
fireEvent(obj,'change');

Fiddle: http://jsfiddle.net/XB3RK/ 小提琴: http//jsfiddle.net/XB3RK/

The onchange event only fires if the user changes the value of the input. 仅当用户更改输入值时才触发onchange事件。 It isn't supposed to fire if the input is changed programmaticly. 如果以编程方式更改输入,则不应触发。

Call the function from whatever function sets the value instead. 从任何设置该值的函数中调用该函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM