0

这更像是一个教育问题,而不是一个需要解决的问题。

所以我有一个input使用Ryan Fait 的自定义元素插件的样式。

<input type="checkbox" class="styled" id="no-favourite" />

我绑定了一个 jQuerychange()处理程序:

$("#no-favourite").change(function(){
    console.log("changed"); 
});

并编辑了自定义元素插件的check方法以包括:

try{
    element.onchange(); 
}catch(err){
    console.log(err);
}

这没有用。我期待一个console.log“改变”,最坏的情况是一个console.log错误,虽然没有收到。单击change关联的label.

我通过使用解决了这个问题:

$(element).change();

所以我想知道,为什么 jQuery 不接受对 的编程调用element.onchange()

4

2 回答 2

2

假设element是一个 DOM 元素(如果它是一个 jQuery 元素,它只会爆炸),您正在尝试调用该元素的 property onchange

当您通过 jQuery 绑定事件处理程序时,它不会添加任何onchange属性 - 只有当您将处理程序内联(在标记中)或通过本机 javascript 绑定时,这些属性才会存在。

于 2012-08-16T02:15:59.280 回答
1

jQuery将使用其 api 绑定的事件存储在每个对象内的特殊data容器中,因此您不能真正使用on*本地方法调用它(只能使用.onchange = function()或 inline本地设置onchange=)。

如果您启动控制台 (chrome) 并键入$.event,您将看到 jQuery 内部事件表示,并且“默认”事件存储在 中$.event.global,并且在内部进行管理。

jQuery.event.global[ type ]http://code.jquery.com/jquery-1.8.0.js搜索

    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 );
于 2012-08-16T02:19:05.860 回答