Javascript 事件侦听器或onClick-最佳实践

Javascript 事件侦听器或onClick-最佳实践,javascript,addeventlistener,Javascript,Addeventlistener,我有一个HTML页面,大约有100个文本框。我目前使用JS事件监听器(blur)来检测用户何时离开文本框。在事件侦听器中,我使用if语句根据使用的文本框过滤操作,即if id==blah,if className==blahblah,等等 将onBlur()放在每个文本框的HTML标记中,以便将操作指向特定的函数,这是一种更好的做法吗?还是我走对了方向?嘿,伙计,正如Sergio所说的那样。最好使用DOM方法在脚本元素中使用事件处理程序。 现在,为了简化任务,请使用事件委派 只需附加docume

我有一个HTML页面,大约有100个文本框。我目前使用JS事件监听器(blur)来检测用户何时离开文本框。在事件侦听器中,我使用
if
语句根据使用的文本框过滤操作,即
if id==blah
if className==blahblah
,等等


onBlur()
放在每个文本框的HTML标记中,以便将操作指向特定的函数,这是一种更好的做法吗?还是我走对了方向?

嘿,伙计,正如Sergio所说的那样。最好使用DOM方法在脚本元素中使用事件处理程序。 现在,为了简化任务,请使用事件委派 只需附加
document.body.onchange=detect

function detect()
{
var textboxvalue=event.target.value //event.target point to text box on which blur event fires
}
这个简单的代码将通过冒泡事件来完成您的任务。无需使用任何数组/条件/类/ID/单独的事件处理程序
“更改”事件与“模糊”事件相同。“更改”仅在文本框的值已更改,因此空/空字符串不适用时才会触发

对于我来说,性能之后的生产力是优先级

由于您是新手,我建议您使用jQuery这样的javascript库。有了它,您可以执行一个简单的语句,将
blur
/
keyup
/
change
事件放在所有事件上,并在一个有组织的位置处理它

我毫不怀疑这可以用纯javascript实现,但javascript库的一个主要好处是通过编写更少的行来提高生产率

在您的特定情况下,我会通过空css
类对所有
执行jQuery
$.keyup()
,如果
关闭另一个空类以指定子文本框:

$('.myEmptyClassThatsOnEachOfThe100Textboxes').keyup(function(){
    if($(this).hasClass('myEmptyClassThatsOnEachTextboxOfThisFirstType')){
        //do stuff
    }
    else if(...
})

最佳实践是在脚本标记之间使用javascript,而不是在HTML中使用内联javascript。在您的特定情况下,也许有一种更好的方法,可以使用100条if语句。你能按现在的样子发布一个代码示例,这样我们就可以帮助你想出一些主意了吗?我会使用一个数组作为元素,另一个数组作为eventlisteners。。。然后,您就可以简单地对它们进行迭代,并用它们的索引来识别它们。有两个问题:每个文本框都需要相同的函数吗?如果是这样的话,是否每个具有某个类名的文本框都具有相同的功能?您需要支持IE8及以上版本吗?(addEventListener是您的标签之一,但IE8不支持)请发布一些HTML,您可能会得到非常有用的帮助!我开始在HTML中使用内联调用。然后我切换到事件侦听器。根据你的回复,我想我会把所有的电话通过事件监听器。大多数文本框使用相同的函数。我也有很多标签,点击时会改变它们的图形。这些都是当前内联的。我也会更改它们。我不认为onblur bubbles,因此在模糊文本框时从不调用detect。当您使用addEventListener并将useCapture设置为true时,会调用detect,但在中不受支持IE8@HMR你是说“模糊”事件是的,对不起。我看到你更新了你的代码。更改事件应该注意,您当前的代码在IE8中不起作用,在FF中也不起作用。要获取事件对象,您可以执行以下操作:
function detect(e){e=e | | window.event;
如果您不熟悉非标准浏览器的所有特性,我同意使用jQuery。这就是为什么我问OP是否支持IE8。如果不是这样,请回答“clean”js解决方案是可能的。如果OP将使用jQuery并需要对IE8的支持,那么不要使用版本2。*,因为该版本对IE8的支持已被放弃。