【问题标题】:Click event handler not working prepend parsed html单击事件处理程序不起作用预先解析的 html
【发布时间】:2014-11-02 20:40:25
【问题描述】:

我有一个从 html 模板解析的元素,我想向它添加一个点击事件,它似乎不起作用。

但是当我添加元素时

$('#formatMe').click();

这里点击是有效的,但是什么时候

var formats = appAPI.resources.parseTemplate("formats.html",result);
$code=$(formats);
$('#vid_div').prepend($code);

但不是来自 parseTemplate 的元素

我正在 appAPI.ready 中编写点击函数,如下所示

appAPI.ready(function($) {

  $("#user-header").append("<div id='formatMe'>Download</div>");

  $('#some-div-in-web-site').append("<div id='vid_div'></div>");

            $('#formatMe').click(function(){

            var url="myurl";

            appAPI.request.get({
                url: url,
                onSuccess: function (data) {

                 var result=appAPI.JSON.parse(data);

                 var formats = appAPI.resources.parseTemplate("formats.html",result);

                    $('#vid_div').html('');
                    $code=$(formats);
                  $('#vid_div').prepend($code);
                }
            });
    });


  $('#close').click(function(){

      alert("dont'click on me!!!");
  });


});

Formats.html 是这样的

<div id="vid_formats">
    <div id="close">&times;</div>

    <div class="wrapper">
     <h1>Download Links</h1>
        <ul>
            <% for (var i=0; i<vids.length; i++) { %>
            <li>
                <a id="format" href="<%=vids[i]['url'] %>"><%=vids[i]['type']%> &nbsp;&nbsp;<%=vids[i]['quality']%> - <%=vids[i]['size']%> </a>
            </li>
            <% } %>
        </ul>
    </div>
</div>

仍然无法触发点击事件,我正在 firefox 中测试。

【问题讨论】:

    标签: onclick jquery-click-event crossrider


    【解决方案1】:

    前言:由于未提供 formats.html 文件和 result 数组的内容,并且从您的示例中也不清楚在哪里定义了 ID 为 close 的元素,我创建了我相信您正在经历的场景。

    在我重新创建的场景中,click 事件处理程序按预期工作,我可以看到警报。以下是我重新创建并在 Chrome 中测试的扩展文件。

    formats.html

    <div>
        <ul>
            <% for (var i=0; i<sites.length; i++) { %>
                <li><a href="<%=sites[i].url%>"><%=sites[i].name%></a></li>
            <% } %>
        </ul>
    </div>
    <div id="close">Close</div>
    

    extension.js

    appAPI.ready(function($) {
        var result = {
                sites:[
                    {url:'  http://cnn.com ', name:'cnn'},
                    {url:'  http://yahoo.com ', name:'yahoo'}
                ]
            },
            formats = appAPI.resources.parseTemplate("formats.html",result);
    
        $('<div id="player"></div>').prependTo('body');
        $code=$(formats);
        $('#player').prepend($code);
        $('#close').click(function(){
            alert('clicked me');
        });
    });
    

    [披露:我是 Crossrider 的员工]

    【讨论】:

    • 我也在做同样的事情,除了我将我的 $code 添加到网站中的现有元素中。我认为问题在于,我会尝试使用您的代码并让您知道
    • 请查看问题@Shlomo
    • 如前所述,该方法没有问题。可能是您的代码中的某些内容导致了问题。如果您提供扩展程序 ID,我很乐意查看。
    • 你找到的任何解决方案@shlomo
    • 我在 Firefox 33.0.2/Win 8.1 上测试了你的扩展,点击工作(不错的扩展),我看到了扩展正在注入的链接。我可以在此处发布图片,但在此之前,如果您希望将此图片保密,请发送电子邮件至 support@crossrider.com,我可以在那里提供。
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多