在jquery中动态添加脚本/功能块

时间:2010-07-29 07:49:45

标签: jquery

编辑:

只是想知道是否可以在html体中添加一个函数(或静态脚本)块或变量。

像这样,

$('body').add(function(){/../}) 

$('body').append('<script></script>')

$('body').fn.myFunc = function(){}

使用.extend是否正确?

一个例子是如果我使用ExternalInterface,我的回调必须在body / html / js中静态定义,但不能在$()。ready函数中定义,除非我有一个全局定义的var并在$()中引用它.ready function

我忽略了这个要求,那就是我想添加动态回调函数的地方。

4 个答案:

答案 0 :(得分:4)

  • 在标记中创建脚本标记

    $('<script/>', {
        type:    'text/javascript',
        src:     'http://...'
    }).appendTo(document.body);
    
  • 扩展jQuery使用

    $.fn.yourmethodname = function(){
    });
    

答案 1 :(得分:2)

有一种方法$.getScript(),您也可以使用它。

示例:

<script>$.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function(){
  $("#go").click(function(){
    $(".block").animate( { backgroundColor: 'pink' }, 1000)
      .animate( { backgroundColor: 'blue' }, 1000);
  });
});</script>

答案 2 :(得分:0)

你几乎可以在Javascript中附加一个函数,它真的不关心。

在你的最后一个选项中,fn对象必须存在于body DOM对象上,然后才能向其添加更多函数。

这样的事情会起作用:

$(function() {
    $('body')[0].fn = function() {};
    $('body')[0].fn.myFunc = function() { alert('Yay function'); };
});

或者,如果您只想在body元素上使用函数:

$('body')[0].myFunc = function() { alert('Yay function'); };

确保在$('body')的末尾包含[0]位,或者将函数附加到包装body DOM对象的JQuery对象。我不认为你可以放心,每次你调用$('body')你都会得到完全相同的JQuery对象。

答案 3 :(得分:0)

我感觉到你的痛苦。但后来我有一个调试噩梦与运行时脚本添加,我决定另一种方法。

这是我如何使用它的一个例子,在这种情况下使用按钮。

我没有在代码中使用静态菜单按钮,而是使用单个按钮功能并使用运行时信息让我的php知道它响应的按钮以及应用程序所需的任何页面参数。这可能是页面ID和部分ID的最小值。不是按钮ID,因为此方法的目的是允许动态添加按钮。只有你的php需要为你添加的任何其他按钮改变它的动作。

  <script type="text/javascript"  >
  $(document).ready(function(){
  $("button").click( function() {
         $.get( "/menu_to_body_respond.php", {
        pageId: $thisPageId
        subSecID: $thisSubID
        }, function( resp ) {
            $("#left_body").html(resp);
            });
  });
 });
</script>

然后使用php函数中的部分执行任何操作 menu_to_body_respond.php

<?php
$pageIDVal = $_GET[ 'thisPageId'];
$subIDVal =  $_GET[ 'thisSubId'];

// code to decide what to do with this button press
// switch statements do a good job, if your 
// application has a lot of items you might want to respond to
//just put the most used items at the beginning of the switch.

//tmp code to give you a response
$outStr = $pageIDVal . " Left Body B2";
echo($outStr);
?>

你可能会混淆它,拥有在本地响应的按钮,例如常规菜单打开/折叠和基本的客户端工作。只需将id命名为按钮,如果其中一个可以响应,则只需使用if-else语句停止运行$(&#39;按钮&#39;)。