Код JavaScript в функции PHP работает только при первом вызове

#javascript #php #jquery

#javascript #php #jquery

Вопрос:

У меня ниже функция PHP содержит некоторый код Javascript, функция работает отлично. Но код javascript работает только при первом вызове функции PHP. Когда я вызываю функцию в другом месте во второй раз, код javascript остается первым вызовом и не изменяется в соответствии с данными второго вызова.

 <?php
function YPE_bsn_font() { ?>
<select id="fonts">
    <option value="">Font one</option>
    <option value="">Font two</option>
</select>
<div class="textloader">
    <?phpecho __('The Quick Brown Fox Jumps Over The Lazy Dog. 1234567890');?>
</div>
<style id="bsn-font-loader" type="text/css">
    .textloader {border:1px solid #ddd;margin:5px 0 0;padding:10px;background:#f8f8f8;}
</style>
<script>
jQuery(document).ready(function($) {

    $("#fonts").change(function() {
        var optionName = $("#fonts option:selected").text();
        var fontName = optionName.split(' ').join('-');
        $('.textloader').attr('id', '' fontName '');
        $("#bsn-font-loader").text('#' fontName ' {font-family: "'  optionName  '"}');
    });
});
</script><?php
}
?>
  

Комментарии:

1. зачем вам нужно добавлять свой html в функцию php ?!

Ответ №1:

Я не знаю, зачем вам нужно добавлять этот код в функцию php! но в любом случае это не способ изменить свойство css для элемента

вот предлагаемое решение для того, что вам нужно

 jQuery(document).ready(function() {
    $("#fonts").change(function() {
        var optionName = $("#fonts option:selected").text();
        var fontName = optionName.split(' ').join('-');
        $('.textloader').css('font-family', fontName);
    });
});
  

Комментарии:

1. Когда я вызываю функцию в другое время и когда я меняю имя шрифта, семейство шрифтов не меняется и остается первой вызывающей функцией. Как я могу изменить семейство шрифтов в каждой вызывающей функции во время изменения имени шрифта

2. если вы имеете в виду, что создаете несколько выборок, чтобы они не могли иметь один и тот же идентификатор, w нужно будет изменить id="fonts" class="fonts" и использовать .fonts selector вместо #fonts, затем заменить $('.textloader').css('font-family', fontName); на $(this).next('.textloader').css('font-family', fontName);

Ответ №2:

Это потому, что вы меняете font-family only в <style> теге, который вычисляется только при загрузке.

Попробуйте изменить CSS элемента напрямую:

ОТРЕДАКТИРОВАНО для двух (или более) <select> , которые меняют шрифт <div> сразу после…

 <?php
function YPE_bsn_font() { ?>
<style id="bsn-font-loader" type="text/css">
    .textloader {border:1px solid #ddd;margin:5px 0 0;padding:10px;background:#f8f8f8;}
</style>

<select class="fonts">
    <option value="arial">Font one</option>
    <option value="Lucida Console">Font two</option>
</select>
<div class="textloader">
    Suzy and Sally are partying...
</div>

<br>
<br>
<select class="fonts">
    <option value="arial">Font one</option>
    <option value="Lucida Console">Font two</option>
</select>
<div class="textloader">
    The Quick Brown Fox Jumps Over The Lazy Dog. 1234567890
</div>

<script>
$(".fonts").change(function() {
    var newFont = $(this).find("option:selected").val();
    var newFontID = newFont.split(' ').join('-');
    $(this).next('.textloader').attr('id', '' newFontID '').css({"font-family":newFont});
});
</script><?php
}
?>
  

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

Комментарии:

1. Спасибо. как я уже сказал, это работа при первом вызове функции. Но когда я вызываю ту же функцию в другом месте или файле, код JavaScript не работает, и семейство шрифтов остается первым вызовом. Я хочу, чтобы при вызове функции во второй раз, когда я меняю имя шрифта, напрямую менялось семейство шрифтов, но в этом случае оно остается первым вызовом и не изменяет семейство шрифтов во время изменения имени параметра

2. Хо!!! Я только что это увидел! Вы пытались просто удалить готовую оболочку document вокруг этой функции? Поскольку это событие изменения происходит, очевидно, когда документ готов… Вам это не нужно. Затем обработчик события будет находиться в глобальной области видимости (не ограничиваясь «on ready»)

3. если вы имеете в виду, что я удаляю эту строку jQuery(document).ready(function($) {}); , я думаю, что после удаления этой строки код не работает. если вы имеете в виду другое, пожалуйста, отредактируйте свой код

4. Вы вызвали функцию один раз, она работает без проблем. Но если вы можете вызвать функцию два раза. означает отображение двух полей выбора и изменение имени шрифта в каждом поле выбора.

5. Хааа… Это что-то другое!! Итак, у вас есть два (2) .textloader divs?