【问题标题】:How to call a script by id using onclick?如何使用onclick通过id调用脚本?
【发布时间】:2012-06-25 02:48:21
【问题描述】:

可能很明显,但我尝试搜索但无法弄清楚。我正在使用具有脚本的第三方工具。该脚本有一个 id,但脚本中的函数没有名称。我有一个 javascript onclick 函数,我想做的就是从 onClick 函数中调用脚本通过它的 id

即。脚本是

<script id="feed" type="text/javascript">(function(){...}())</script>

我需要从

调用这个脚本
$('#searchBox').html("<li onClick=\"$(\"#feed\");\">Click to contact us</li>");

我尝试像上面那样调用“提要”脚本,但没有成功。如果重要,“提要”脚本位于页面正文中,#searchBox 是该页面搜索字段中的自动建议框。将不胜感激任何帮助!谢谢!

【问题讨论】:

  • 什么是第三方脚本?
  • 脚本是一个反馈表。我正在使用标准的 javascript。
  • @tterbeg: $('#searchBox').html( 不是“标准 javascript”。
  • 该函数返回什么值?您是否应该调用匿名函数返回的方法。或者该匿名函数可能会初始化您应该使用的全局对象。
  • @Ramesh:那个函数不能返回任何东西,但你是对的,它可以设置一些全局对象。

标签: javascript html onclick


【解决方案1】:

我会试试这个:

$("#searchbox").html("<li onClick=\"eval($(\"#feed\").html())\">Click to contact us</li>")

假设#feed 中的脚本自行执行,看起来像这样:(function(){...})()

但是,如果该函数看起来与您发布的完全一样,(function(...){}),这应该可以工作:

$("#searchbox").html("<li onClick=\"eval($(\"#feed\").html())()\">Click to contact us</li>")

【讨论】:

  • 您的第一个假设是正确的(对上述问题进行了更改)。但是,使用 eval(...).html() 不起作用:(
  • 应该是 eval($("#feed").html())
  • 对不起 - 我试过了 "
  • ...
  • "
  • 出于某种原因,在我的 JSFiddle 测试中,JSQuery 将 $("#feed") 修改为有一个空格... $(" #feed") 这当然行不通。相反,我依赖于纯 JavaScript。概念证明:jsfiddle.net/S8QHp/1
  • 嗯...问题可能是上面代码所在的 .js 文件与“feed”所在的主 html 页面位于不同的文件(和文件夹)中。 由根文件夹中的 main.html 页面调用。
  • 【解决方案2】:

    您可以尝试将未命名的函数变成命名函数。通过在头部添加一个新的脚本标签。

    $('<script></scr' + 'ipt>', {
        html: 'function feedback(){' + $('#feed').html() + ' }',
        type: 'text/javascript'
    }).appendTo('head');
    

    或者更好的是,使用new Function

    var feedback = new Function($('#feed').html());
    

    然后在新 DOM 元素的点击处理程序中使用该函数。

    $('#searchBox').html($('<li></li>',{
        text: 'Click to contact us'
    }).click(feedback));
    

    (我讨厌使用内联 JavaScript。)

    【讨论】:

    • +1。我喜欢new Function() 选项。 (假设无法以任何方式更改第三方脚本。)
    • @nnnnnn: new Function 是一个隐含的eval,但这确实是这里唯一的选择。但是由于脚本位于(function(){...}()) 中,因此您无法更改其内容(无论如何,JavaScript 中都不会,我相信您可以使用一些工具)。
    • 是的,我的意思是如果 OP 不能部署不同版本的脚本,这将是一个比尝试在浏览器中操作它更好的选择。我意识到new Function 是一种eval,但对我来说,最好只做一次并创建一个实际的函数,而不是每次点击都做eval
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签