【问题标题】:Events does not work on html5 object tag事件不适用于 html5 对象标记
【发布时间】:2014-12-05 11:36:11
【问题描述】:

似乎标准和自定义的触发/on jquery 事件都不适用于对象标记。

不起作用

var $test = $("<object>"); 
$test.on("test", function (){
  console.log("jquery test handler");
});
$test.trigger("test");

虽然它适用于其他 html 标签(尝试过的 div、视频等)。

Vanilla js 解决方案有效:

var test = document.createElement("object");
test.addEventListener("testV", function(e) {
  console.log("vanilla test handler");
 });
var event = new CustomEvent("testV");
test.dispatchEvent(event);

jQuery 版本。 1.11.1
测试:http://codepen.io/anon/pen/dPGoJg


问题

  1. 只有我一个人有这个错误还是我做错了什么?
  2. 这是一个 jQuery 错误还是预期的行为?
  3. 是否有任何解决方法(特别是对于自定义事件,除了使用其他元素)?

【问题讨论】:

    标签: javascript jquery html javascript-events


    【解决方案1】:

    您的第一个示例不起作用,因为该元素尚未添加到 DOM。

    var $test = $("body").append("<object>"); 
    $test.on("test", function (){
      console.log("jquery test handler");
    });
    $test.trigger("test");
    

    您可以使用替代的 JQuery 函数来添加元素。

    【讨论】:

    • 这确实有效,可能被视为解决方法。解决方法,因为我的第一个示例适用于其他 html 标记,但不适用于对象。此外,这可行:var $test = $("&lt;object&gt;"); $test = $("body").append($test); ... 而这不行:var $test = $("&lt;object&gt;"); $("body").append($test); ... 这很奇怪
    【解决方案2】:

    更新:
    First Post 完全错误,但这似乎适用于单击对象标签

    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
    
    <script>
    $(document).on('click', 'object', function(event) {
        console.log("jquery test handler");});
    </script>
    <object width="400" height="400">Object</object>
    

    重要的部分是$(document)
    更新 2:使用触发器和自定义事件与问题更相关的代码

    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
    
    <object>Object</object>
    <script>
    $(document).on('test', 'object', function(event) {
        console.log("jquery test handler");});
    $('object').trigger('test');
    </script> 
    

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2011-10-20
      • 1970-01-01
      相关资源
      最近更新 更多