4 Stimmen

Dynamisch ein Skript/Funktionsblock in jQuery hinzufügen

EDITIERT:

Ich frage mich gerade, ob es möglich ist, eine Funktion (oder statischen Skriptblock) oder eine Variable zum Body des HTML hinzuzufügen.

So etwas wie dies,

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

oder

$('body').append('')

oder

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

Ist es korrekt, .extend zu verwenden?

Ein Beispiel ist, wenn ich ExternalInterface benutze, müssen meine Rückruffunktionen statisch im Body/HTML/JS definiert werden, aber nicht in der $().ready-Funktion, es sei denn, ich habe eine global definierte Variable und beziehe mich darauf in der $().ready-Funktion.

Ich habe dieses Erfordernis übersehen, und daher wollte ich dynamische Rückruffunktionen hinzufügen.

4voto

jAndy Punkte 223172
  • Um ein Skript-Tag in Ihrem Markup zu erstellen

    $('', {
        type:    'text/javascript',
        src:     'http://...'
    }).appendTo(document.body);
    </code></pre></li>
    <li><p>Um <code>jQuery</code> zu erweitern, verwenden Sie</p>
    
    <pre><code>$.fn.yourmethodname = function(){
    });
    </code></pre></li>
    </ul></x-turndown>

2voto

Sarfraz Punkte 366217

Es gibt eine Methode $.getScript(), die Sie auch verwenden können.

Beispiel:

$.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);
  });
});

0voto

ntcolonel Punkte 900

Sie können praktisch eine Funktion an fast alles in Javascript anhängen, es ist wirklich egal.

In Ihrer letzten Option muss das fn-Objekt auf dem body DOM-Objekt existieren, bevor Sie weitere Funktionen daran anhängen können.

So etwas würde funktionieren:

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

Oder, wenn Sie die Funktionen direkt am body-Element möchten:

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

Vergewissern Sie sich, dass Sie das [0] am Ende von $('body') einfügen, sonst hängen Sie Ihre Funktion an ein JQuery-Objekt, das das body DOM-Objekt umschließt. Ich glaube nicht, dass Sie sich darauf verlassen können, dass jedes Mal, wenn Sie $('body') aufrufen, das genau gleiche JQuery-Objekt erhalten.

0voto

Bob Punkte 95

Ich fühle deinen Schmerz. Aber dann hatte ich einen solchen Debug-Albtraum mit Laufzeitskriptzusätzen, dass ich mich für eine andere Methode entschieden habe.

Das ist ein Beispiel dafür, wie ich es mache, in diesem Fall mit der Verwendung von Schaltflächen.

Statt statischer Menüschaltflächen im Code zu haben, setze ich eine einzige Schaltflächenfunktion ein und verwende Laufzeitinformationen, um meinem PHP mitzuteilen, auf welche Schaltfläche es reagieren soll und welche Seitendaten Ihre Anwendung benötigt. Dies ist wahrscheinlich mindestens eine Seiten-ID und Abschnitts-ID. Keine Schaltflächen-ID, denn der Zweck dieser Methode ist es, die dynamische Hinzufügung von Schaltflächen zu ermöglichen. Nur Ihr PHP muss seine Aktion für zusätzliche Schaltflächen ändern.

  $(document).ready(function(){
  $("button").click( function() {
         $.get( "/menu_to_body_respond.php", {
        pageId: $thisPageId
        subSecID: $thisSubID
        }, function( resp ) {
            $("#left_body").html(resp);
            });
  });
 });

Dann kannst du mit dem Abschnitt in deiner PHP-Funktion menu_to_body_respond.php machen, was du willst.

Sie können natürlich verschiedene Dinge mischen, z.B. Schaltflächen haben, auf die lokal reagiert wird, wie das allgemeine Menü Öffnen/Schließen und einfache Client-seitige Arbeiten. Platzieren Sie einfach zuerst die Schaltflächen mit benannten IDs, und wenn eine davon reagieren könnte, stoppen sie die $('button') einfach mit einer if-else-Anweisung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X