2010-10-28 33 views
4

我发现一个奇怪的HTML文本框和JavaScript异常,我已经缩小到了html/javascript的特性,我希望有人可以教育我。当程序更新时,HTML JavaScript onChange处理程序不会被调用

我已经下载并实现了一个日历插件,该插件创建一个包含日历和选区的简单图层,并将选定的日期传递回文本框。

我想要做的就是当文本框的变化(电平变化使用),然后调用一个Ajax功能来更新数据库...

的问题是,平变化不会被调用,我还抓能够与下面......这非常简单的代码来证明这一点。当按钮被点击它改变了值,那么应该触发的onchange,并显示一个警告框...

<input type="button" name="setValue" id="setValue" value="setValue" onClick="document.getElementById('textinput').value='Updated'">&nbsp; 
<input type="button" name="clearValue" id="clearValue" value="clearValue" onClick="document.getElementById('textinput').value=''"><br> 
<input type="text" name="textinput" id="textinput" onChange="alert(this.name)"> 

这是标准?有没有解决方法?

+0

@Ghommey:我对你现在删除的答案的第二条评论是错误的。只是FYI。 – 2010-10-28 08:44:17

+0

可能重复的[Onchange输入事件不是在jQuery上触发](http://stackoverflow.com/questions/9805215/onchange-input-event-isnt-fired-on-jquery) – 2013-03-13 15:55:37

回答

0

你为什么不创建一个自定义功能,如:

function change(val){ 
    var el = document.getElementById('textinput'); 
    el.value = val; 
    alert(val); 
} 
3

onChange事件不是由值的纲领性变化触发的文本输入。您必须在您自己更改值后调用要执行的代码。

0

Onchange不会被调用,直到该领域失去焦点/另一个editfield获得焦点。

0

最好的办法是把你的代码来处理的功能(比如,handleTextChange)的变化,然后调用该函数change事件处理当您在代码中直接更改。

HTML:

<input type="button" name="setValue" id="setValue" value="setValue" onClick="changeField('textinput', 'Updated')">&nbsp; 
<input type="button" name="clearValue" id="clearValue" value="clearValue" onClick="changeField('textinput', '')"><br> 
<input type="text" name="textinput" id="textinput" onChange="handleFieldChange(this)"> 

的JavaScript:

function changeField(id, value) { 
    var field = document.getElementById(id); 
    if (field) { 
     field.value = value; 
     handleFieldChange(field); 
    } 
} 

题外话一对夫妇的题外话评论:

  • 也许最好使用onchange,而不是onChange。在HTML中,没关系;在XHTML中,它很重要,并且元素上的反射属性始终为,总是全部小写,因此...更容易输入。 :-)
  • 除非你有充分的理由不这么做,否则我建议在事后处理事件处理程序,而不是内联HTML属性。由于浏览器的不同,这很容易通过库jQuery,Closure,Prototype,,YUIany of several others来完成,但是当然库可以做的任何事情都可以做,您可以自己做,它可能需要更长时间并且接受更少的测试。:-)
2

textboxes和textarea元素上的onchange事件仅在元素失去焦点时触发,并且当元素失去焦点时它的值现在不是焦点时的值。

相关问题