Многоуровневая цитата в JavaScript? - PullRequest
1 голос
/ 31 марта 2012

Хорошо, это, наверное, самый глупый вопрос, но терпите меня ...

Как заставить это работать:

$("#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>');

Интересующая часть:

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

Проблема начинается с «onchange». Я всегда могу сделать функцию, которая вызывает эти два, и решение будет:

$("#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>');

Это работает, но если возможно, я бы хотел решить проблему, а не просто использовать метод обхода.

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Я действительно не знаю, что вы на самом деле делаете. Но если вы просто не хотите писать это более jQuery-способом .. Это может помочь ..

$('#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'));
        })
);

Прочтите этот пост, чтобы узнать, как создавать элементы с помощью jQuery:

Полагаю, вам просто нужно добавить такую ​​строку, чтобы исправить Проблема:

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

* П.С .: Не говори, что это глупо. Я такой же, как ты раньше ..:]

0 голосов
/ 31 марта 2012

Используйте систему шаблонов, например, подчеркивание. Поддерживается и легче читается / устраняет неисправности.

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

Пример:

    <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>
...