Mit Jquery Eingabefelder nachladen

Kalito

Erfahrenes Mitglied
Hallo,

ich arbeite gerade mit Cakephp und habe ein Element erstellt und in diesem mehrere Eingabefelder definiert. In meiner Hauptseite kann ich ein solches Element mit
PHP:
echo $this->element('myElement')
aufrufen und dieses wird dann entsprechend eingebunden. Nun möchte ich aber das ein User mittels eines Button dieses Element x-mal eininden kann. Folgendes habe ich bereits

Elemtent
PHP:
<div class="user_only" id="">
<?php
    echo $this->Form->input('salutation');
    echo $this->Form->input('firstname');
    echo $this->Form->input('lastname');
    echo $this->Form->input('email_private');
?>
</div>

User.php
PHP:
<script>
    var template = <?php echo $this->element('Forms/Users/Create'); ?>
</script>
<?php 
echo $this->Html->script('Individual/User/create');
echo $this->Form->create('User'); 
?>
<div id="allUser"></div>
<div id="plus">Hinzufügen</div>

<?php echo $this->Form->end('Speichern');?>

create.js
Code:
$(document).ready(function(){
    $("#plus").click(function() {
        $("#allUser").append(template);
    });
});


Beim Ausführen kommt die Fehlermeldung, dass die variable template nicht bekannt ist.

Wie kann ich also am besten dieses Element hinzufügen?

sonnige Grüße.
Kalito
 
Hi,

schau du dir doch mal den Quelltext (den <script>-Block vor allem) an, den dein PHP-Skript erzeugt.
Da kann in keinster Weise irgendein Stückchen valides JS drin sein ;)

Ich würde das ganze Template in einen eigenen <script>-Tag packen:
PHP:
<script type="text/x-kalito-tmpl">
<?php echo $this->element(...); ?>
</script>
 
und dann?
Firebug gibt mir folgendes aus:
Code:
var template = <div>....</div>

Kann es sein, dass JS, das nicht als validen HTML-Code erkennt?
 
So wird schonmal ein Fehler behoben :-)
Code:
<script>
    var template = "<?php echo $this->element('Forms/Users/Create'); ?>";
</script>
 
Ne, daran lag es sicher nicht.
Wie soll denn folgender Code jemals valides JavaScript repräsentieren? Niemals.

Code:
var template = <div>....</div>

Mit den Double Quotes hast nun ein String drausgemacht. Wenn dein Template allerdings selbst Double Quotes enthält, bekommst du Probleme.

Folgendes ist auch eine einfache Lösung:
PHP:
var template = (<?php echo echo json_encode(array('a' => $this->element(...))); ?>).a;
 

Neue Beiträge

Zurück