2012-03-30 11 views
1

OK, dann ist dies vielleicht dümmste Frage immer aber mit mir tragen ....Multilevel-Zitat in JavaScript?

Wie diese Arbeit zu machen:

$("#basephoto").after(
    '<tr><td valign="bottom">Additional photo:</td> 
     <td>&nbsp;&nbsp;&nbsp;</td> 
     <td><div id="addphoto'+curupfld+'" class="browsebg"> 
     <p class="bpath"></p> 
     <input onchange="fillBrowse(\"#addphoto'+curupfld+'\",this); validateExt(field);" class="browse transfield" type="file" name="altphoto'+curupfld+'" size="40" /> 
     <span onclick="delImgField(this.id)" id="delbtn'+curupfld+'" class="abuttons delbtn"></span></div> 
     </td> 
    </tr>'); 

Der Teil von Interesse:

onchange="fillBrowse(\"#addphoto'+curupfld+'\",this); validateExt(field);" 

Das Problem beginnt bei der "onchange". Ich kann immer eine Funktion machen, dass diese beiden und die Lösung nennt wäre:

$("#basephoto").after(
    '<tr> 
    <td valign="bottom">Additional photo:</td> 
    <td>&nbsp;&nbsp;&nbsp;</td> 
    <td> 
     <div id="addphoto'+curupfld+'" class="browsebg"> 
     <p class="bpath"></p> 
     <input onchange=functionCaller("#addphoto'+curupfld+'",this) class="browse transfield" type="file" name="altphoto'+curupfld+'" size="40" /> 
     <span onclick="delImgField(this.id)" id="delbtn'+curupfld+'" class="abuttons delbtn"></span> 
     </div> 
     </td> 
    </tr>'); 

Dies funktioniert, aber wenn möglich, möchte ich das Problem zu lösen, anstatt nur eine Abhilfe Methode zu verwenden.

+0

Können Sie das gewünschte Verhalten ein wenig besser erklären? –

+2

Es wäre * way * besser, alle Event-Handler mit jQuery hinzuzufügen, da Sie es ohnehin schon verwenden. Das ist ein wirklich schwer zu wartendes Chaos. Verwenden Sie stattdessen jQuery zum inkrementellen Aufbau von Elementen. – Pointy

+0

Beim nächsten Mal versuchen Sie und machen Sie Ihren Code leicht lesbar. Ich habe es so gut wie möglich aussortiert. – Jivings

Antwort

2

ich wirklich nicht wissen, was Sie wirklich tun. Aber wenn Sie nur wan't es schreiben in einem jQuery Weg .. Dies können helfen ..

$('#basephoto').append('<tr />'); 
$('#basephoto tr').append(
    $('<td />') 
     .attr('valign','bottom') 
     .html('Additional photo:') 
); 
$('#basephoto tr').append(
    $('<td />') 
     .html('&nbsp;&nbsp;&nbsp;') 
); 
$('#basephoto tr').append(
    $('<td />') 
     .html(
      $('<div />') 
      .attr({ 
       "id":"addphoto-"+curupld, 
       "class":"browsebg" 
      }) 
      .html(
       $('<p />') 
        .attr('class','bpath') 
        .html('') 
      ) 
     ) 
); 
$('#addphoto-'+curupfld).append(
    $('<input />') 
     .attr({ 
      "class":"browse transfield", 
      "type":"file", 
      "name":"altphoto-"+curupfld, 
      "size":"40" 
     }) 
     .change(function(){ 
      functionCaller('#addphoto-'+curupfld,this); 
      validateExt(field); 
     }) 
); 
$('#addphoto-'+curupfld).append(
    $('<span />') 
     .attr({ 
      "class":"abuttons delbtn", 
      "id":"delbtn-"+curupfld 
     }) 
     .click(function(){ 
      delImgField($(this).attr('id')); 
     }) 
); 

Schauen Sie sich diesen Beitrag mehr zu wissen, wie Elemente erstellen mit jQuery:

ich Ihnen nur raten brauchen eine Zeile wie diese fügen Sie dann Ihre Problem zu beheben:

$('#input_that_has_the_change_event').change(function(){ 
    fillBrowse('#addphoto'+curupfld,this); 
    validateExt(field); 
}); 

* PS .: Sagen Sie nicht, dass es dumm ist. Ich bin genau wie du vor ..:]

+0

Nein, ich brauche es nicht mehr zu suchen jqueryish Ich habe bereits eine Lösung gefunden das zweite Problem aufgetreten ist. Was ich wissen möchte ist, warum funktioniert mein erstes Code-Snippet nicht, ist es weil ich einige Zitate vermasselt habe, den richtigen Weg, um es wenn überhaupt zu beheben. Syntax ist hier die Frage. –

+0

Wie wäre es, wenn Sie Ihrer Eingabe eine ID oder eine Klasse geben und dann eine weitere jQuery-Zeile wie folgt hinzufügen: $ ('# input') ändern (function() {fillBrowse ('# addphoto' + curupfld, this); validateExt (Feld);}); –

+0

Ich habe so etwas gemacht. Ich habe gerade kein Ereignis über jQuery einem Selektor zugewiesen, weil ich irgendwo gelesen habe, dass seine Leistung eine schlechte Bewegung ist, weil es die gesamte DOM-Struktur scannt, um einen Selektor zu finden. Deshalb haben sie Event-Handler wie live(), delegate(), on(), das kann die Suche ein Handle live injiziert Elemente eingrenzen. (Ich kann falsch daran sein, aber das ist, was ich in diesem Moment erinnerte) Was ich getan habe, ist eine Funktion, die diese beiden ruft und das ist es. Weil eine Funktion keine Anführungszeichen der Stufe 3 wie zwei benötigt und gut funktioniert. Siehe mein drittes Snippet. –

0

Verwenden Sie ein Vorlagensystem wie Unterstrich. Wartbar und einfacher zu lesen/zu beheben.

http://documentcloud.github.com/underscore/

Beispiel:

<script id="templateA" type="text/template"> 
      <p> 
       Test stuff <a href="/home.html"><%= label %></a> 
       ... 
      </p> 
    </script> 
... 

<script type="javascript"> 
     var templateFunction = _.template($('#templateA').html()); 
     $('#someDivID').after(templateFunction({label: 'Here'})); 
</script> 
+0

Sie erwarten zu viel von mir, ich bin ein Newbe und vielleicht nicht geschickt genug, um dies zu verwenden, und auch ich will jetzt nicht alles neu schreiben ... aber auch so hast du mich interessiert in diesem Template-Ding, so werde ich es für verfolgen zukünftige Projekte –

+0

Es macht wirklich Ihre Projekte viel weniger Arbeit wenn du in sechs Monaten zurückgehst und Dinge modifizieren musst.Vorlagen sind der Weg zu gehen, auf Ihrem nächsten Projekt, wo Sie dynamisch Inhalte in js generieren versuchen es :) – Ericson578