Javascript jQuery更改和单击事件

Javascript jQuery更改和单击事件,javascript,jquery,events,Javascript,Jquery,Events,将事件绑定到元素应该类似于: $( document ).on( 'change', '#mySelect', showEvent ); $( document ).on( 'click', '#mySelect', showEvent ); function showEvent() { console.log( event.target ); } 但是,通过如下所示的简单测试,将更改和单击事件绑定到对象mySelect,它们会在不同的元素上触发(仅通过更改文档上的任意位置的选择和单击来

将事件绑定到元素应该类似于:

$( document ).on( 'change', '#mySelect', showEvent );
$( document ).on( 'click', '#mySelect', showEvent );

function showEvent() {
  console.log( event.target );
}
但是,通过如下所示的简单测试,将更改和单击事件绑定到对象mySelect,它们会在不同的元素上触发(仅通过更改文档上的任意位置的选择和单击来更改)

两个问题:

  • 变更事件是如何工作的?根据,它不应该工作,因为选择器必须是字符串:
  • 用于筛选触发事件的选定元素的后代的选择器字符串

  • 它不起作用,但是,如果改变起作用,为什么不点击
  • 选择器

    Type:String
    用于筛选触发事件的选定元素的后代的选择器字符串。如果选择器为null或省略,则事件总是在到达选定元素时触发

    取自

    您将选择器用作jQuery对象,此方法主要用于将事件绑定到动态生成的元素。因此,您可以将事件直接绑定到jQuery对象,如下所示:

    var mySelect = $( '#mySelect' );
    
    mySelect.on( 'change', mySelect, showEvent )
            .on( 'click', mySelect, showEvent );
    
    function showEvent() {
      console.log( event.target );
    }
    
    如果是动态生成的,则删除
    $
    包装,只需将其作为字符串提供即可

    var mySelect = '#mySelect';
    
    $( document ).on( 'change', mySelect, showEvent );
    $( document ).on( 'click', mySelect, showEvent );
    
    function showEvent() {
      console.log( event.target );
    }
    

    $(文档).on('change',mySelect,showEvent)无效。如果您确切知道要将事件附加到哪个元素,那么将事件委托给文档有什么意义?@Stryner可能
    mySelect
    元素是在页面中动态生成的(如果是这样的话,无论如何都不应该使用
    document
    ,太全局了)@斯特莱纳:我知道这是无效的,因此我提出了问题1。关于你的问题,Jeff Noel是对的,我有一个单页应用程序,因此页面和元素是动态加载的,因此我知道的唯一元素总是存在于文档和正文中。你的建议正确,但我的问题仍在等待答案。为什么以错误的方式绑定更改事件(它不会!!!)而单击则不会?您没有遵循jQuery文档的建议
    var mySelect = '#mySelect';
    
    $( document ).on( 'change', mySelect, showEvent );
    $( document ).on( 'click', mySelect, showEvent );
    
    function showEvent() {
      console.log( event.target );
    }