Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавить форму (https://javascript.ru/forum/misc/83493-dobavit-formu.html)

Ubivectel 24.12.2021 11:24

Добавить форму
 
Здравствуйте товарищи!

Вот этот код:

<a href="javascript:kide.insertSmile(' A70 ')">
         <img src="/components/com_kide/templates/default/images/iconos/A70.gif" alt="A70"></a>


вставляет смайлик вот сюда:

<textarea maxlength="3000" class="KIDE_dc_admin" id="KIDE_txt" placeholder="Сюда песать текст!" cols="50" rows="4" name="txt" onkeypress="return kide.pressedEnter(event, false)" onkeydown="kide.check_shift(event, false, false)" onkeyup="kide.check_shift(event, true, false)" style="font-size: 16px;"></textarea>


очень бы хотелось, что бы вставлял сюда:

<textarea class="KIDE_dc_admin" onkeyup="kide.check_shift(event, true, true)" onkeydown="kide.check_shift(event, false, true)" id="privados_txt" cols="28" rows="3" name="privados_txt" onkeypress="return kide.pressedEnter(event, true)"></textarea>


когда оно в фокусе. Если все правильно понял, вот скрипт который за это отвечает:

insertSmile: function (text) {
        let textarea = document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },

    filter_smilies: function (s) {
        s = " " + s + " ";
        for (let i = 0; i < this.smilies.length; i++) {
            s = s.replace(
                " " + this.smilies[i][0],
                '<img alt="' +
                this.smilies[i][0] +
                '" title="' +
                this.smilies[i][0] +
                '" src="' +
                this.smilies[i][1] +
                '" class="KIDE_icono" />'
            );
            s = s.replace(
                " " + this.smilies[i][0].toLowerCase(),
                '<img alt="' +
                this.smilies[i][0] +
                '" title="' +
                this.smilies[i][0] +
                '" src="' +
                this.smilies[i][1] +
                '" class=KIDE_icono" />'
            );
        }


Попробовал добавить функцию:

insertSmile: function (text) {
        let textarea = document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },

    insertSmile: function (textp) {
        let textarea_privados = document.forms.kideForm.privados_txt;
        textarea_privados.value += " " + textp;
        textarea_privados.focus({});
    },


    filter_smilies: function (s) {
        s = " " + s + " ";
        for (let i = 0; i < this.smilies.length; i++) {
            s = s.replace(
                " " + this.smilies[i][0],
                '<img alt="' +
                this.smilies[i][0] +
                '" title="' +
                this.smilies[i][0] +
                '" src="' +
                this.smilies[i][1] +
                '" class="KIDE_icono" />'
            );
            s = s.replace(
                " " + this.smilies[i][0].toLowerCase(),
                '<img alt="' +
                this.smilies[i][0] +
                '" title="' +
                this.smilies[i][0] +
                '" src="' +
                this.smilies[i][1] +
                '" class=KIDE_icono" />'
            );
        }


Но тогда insertSmile вообще перестает работать. :help:

рони 24.12.2021 12:49

Ubivectel,
в оба поля одновременно?

Ubivectel 24.12.2021 12:52

Нет нет, в то которое в фокусе что бы вставлялся, т.е. где в данный момент курсор

рони 24.12.2021 12:55

Ubivectel,
если одновременно то так
insertSmile: function (text) {
        let textarea = document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus();
        textarea = document.querySelector('[name="privados_txt"]');
        textarea.value += " " + text;
        textarea.focus();

    },


если по разному то надо продублировать и добавить функцию но с другим именем


<a href="javascript:kide.insertSmilePrivados(' A70 ')">
         <img src="/components/com_kide/templates/default/images/iconos/A70.gif" alt="A70"></a>

insertSmilePrivados: function (text) {
        let textarea = document.querySelector('[name="privados_txt"]');
        textarea.value += " " + text;
        textarea.focus();

    },

Ubivectel 24.12.2021 13:35

Функцию добавил, но не понимаю как быть с этим:

<a href="javascript:kide.insertSmilePrivados(' A70 ')">
         <img src="/components/com_kide/templates/default/images/iconos/A70.gif" alt="A70"></a>


Смайлики прописаны в HTML вот так:

<a href="javascript:kide.insertSmile(' A01 ')">
         <img ititle="A01" src="components/com_kide/templates/default/images/iconos/A01.gif" alt="A01" /></a>
         <a href="javascript:kide.insertSmile(' A03 ')">
         <img title="A03" src="components/com_kide/templates/default/images/iconos/A03.gif" alt="A03" /></a>
         <a href="javascript:kide.insertSmile(' A04 ')">
         <img title="A04" src="components/com_kide/templates/default/images/iconos/A04.gif" alt="A04" /></a>
         <a href="javascript:kide.insertSmile(' A05 ')">
         <img title="A05" src="components/com_kide/templates/default/images/iconos/A05.gif" alt="A05" /></a>
         <a href="javascript:kide.insertSmile(' A06 ')">
         <img title="A06" src="components/com_kide/templates/default/images/iconos/A06.gif" alt="A06" /></a>
         <a href="javascript:kide.insertSmile(' A07 ')">
         <img title="A07" src="components/com_kide/templates/default/images/iconos/A07.gif" alt="A07" /></a>
         <a href="javascript:kide.insertSmile(' A08 ')">
         <img title="A08" src="components/com_kide/templates/default/images/iconos/A08.gif" alt="A08" /></a>
         <a href="javascript:kide.insertSmile(' A09 ')">
         <img title="A09" src="components/com_kide/templates/default/images/iconos/A09.gif" alt="A09" /></a>

Ubivectel 24.12.2021 13:42

Поменял код одного смайла на:

<a href="javascript:kide.insertSmilePrivados(' A01 ')">
         <img ititle="A01" src="components/com_kide/templates/default/images/iconos/A01.gif" alt="A01" /></a>


и теперь он вставляется только в "privados_txt" независимо от того какой из textarea в фокусе

рони 24.12.2021 15:09

Ubivectel,
выбор по фокусу.

попробуй так.
всё что выше убрать
insertSmile: function (text) {
        let textarea = document.activeElement||document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },

Ubivectel 24.12.2021 15:16

Заменил:

insertSmile: function (text) {
        let textarea = document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },

    insertSmilePrivados: function (text) {
        let textarea = document.querySelector('[name="privados_txt"]');
        textarea.value += " " + text;
        textarea.focus();

    },


на:

insertSmile: function (text) {
        let textarea = document.activeElement||document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },


Так не срабатывают ни туда ни сюда (

рони 24.12.2021 15:49

Ubivectel,
это куда-то ...
let textareaActive;
document.addEventListener( "mouseup" , function({target}) {
if(target = target.closest("textarea"))  textareaActive = target;
  });


это сам знаешь куда.
insertSmile: function (text) {
        let textarea = textareaActive ||document.forms.kideForm.txt;
        textarea.value += " " + text;
        textarea.focus({});
    },

Ubivectel 24.12.2021 16:11

Хм, сейчас клик по смайлику удаляет курсор из полей ...


Часовой пояс GMT +3, время: 04:17.