这更像是一个教育问题,而不是一个需要解决的问题。
所以我有input
使用Ryan Fait's custom elements plugin设置样式。
<input type="checkbox" class="styled" id="no-favourite" />
我绑定了一个jQuery change()
处理程序:
$("#no-favourite").change(function(){
console.log("changed");
});
并编辑了自定义元素插件的check
方法以包含:
try{
element.onchange();
}catch(err){
console.log(err);
}
这不起作用。我预计会有console.log
“更改”,最坏的情况是console.log
错误,尽管都没有收到。单击关联的change
时会调用jQuery label
处理程序。
我通过使用:
解决了这个问题$(element).change();
所以我想知道,为什么jQuery没有选择element.onchange()
的程序化调用?
答案 0 :(得分:2)
假设element
是一个DOM元素(如果它只是一个jQuery元素,它就会爆炸),你试图调用该元素的属性onchange
。
当您通过jQuery绑定事件处理程序时,它不会添加任何onchange
属性 - 只有在内联(标记)或通过本机javascript绑定处理程序时才会存在这些属性。
答案 1 :(得分:1)
jQuery
将使用其api绑定的事件存储在每个对象内的特殊data
容器中,因此您无法使用on*
本机方法(只能是使用.onchange = function()
或内联onchange=
)原生设置。
如果启动控制台(chrome)并输入$.event
,您将看到事件的jQuery内部表示,“默认”事件存储在$.event.global
中,并在内部进行管理。
在http://code.jquery.com/jquery-1.8.0.js
搜索jQuery.event.global[ type ]
if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
// No jQuery handlers for this event type, and it can't have inline handlers
return;
}
// Caller can pass in an Event, Object, or just an event type string
event = typeof event === "object" ?
// jQuery.Event object
event[ jQuery.expando ] ? event :
// Object literal
new jQuery.Event( type, event ) :
// Just the event type (string)
new jQuery.Event( type );