Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

Demon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
значит что то не так у вас срабатывает.
ссылку бы.

 
<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
<script src="https://sa.ultratel.pro/dataTables.js" ></script>
<style>
.demoModal {
    padding: 20px;
    width: 320px;
    background-color: #393939;
    box-shadow: 0 0 10px 0 #fff;
    border-radius: 10px;
    z-index: 1000;
    text-align: center;
}
 
.demoModal h2 {
    color: #00c1c5;
    font-size: 1.3em;
}
 
.demoModal label {
    color: #fff;
    font-size: 0.9em;
    margin-bottom: 0.1em!important;
}
 
.demoModal__info {
    margin-top: 0.7em;
    color: #fff;
}
 
.demoModal input[type='email'] {
    width: 100%;
    font-size: 1.2em;
    box-sizing: border-box;
    border: 1px solid #ccc;
    border-radius: 5px;
    padding: 10px;
    margin-top: 0.6em;
}
 
.demoModal__actions {
    margin-top: 0.8em;
}
 
.demoModal__button {
    padding: 5px 10px;
    color: #fff;
    background-color: transparent;
    border: 2px solid #fff;
    cursor: pointer;
    font-size: 16px;
    border-radius: 5px;
    margin: 10px;
    transition: all .3s;
}
 
.demoModal__button.active {
    background-color: #00c1c5;
}
 
.demoModal__button.active:hover {
    color: #00c1c5;
    background-color: #fff;
}
 
.demoModal__button.close {
    color: #393939;
    background-color: #ccc;
}
 
.demoModal__button.close:hover {
    background-color: #a9a9a9;
}
 
/* Shadow */
.demoModalShadow {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%!important;
    /*max-width: 100%!important;*/
    height: 100%!important;
    /*max-height: 100%!important;*/
    justify-content: center;
    align-items: center;
    background: rgba(204, 204, 204, 0.4);
    z-index: 99999;
    display: none;
}
</style>
</head>
<body>
<div id="demoModalShadow" class="demoModalShadow">
    <form id="demoModal" class="demoModal">
        <div id="demoModalInfo" class="demoModal__info">
            <label for="email">email:</label>
            <input type="email" name="email" id="email" placeholder="your@email.com">
        </div>
        <div class="demoModal__actions">
            <input type="submit" id="demoModalSubscribe" class="demoModal__button active" value="1111">
            <input type="button" id="demoModalClose" class="demoModal__button close" value="2222">
        </div>
    </form>
</div>
<button id='demoModalStart' class='demoModalStart'>Test1</button>
<script>
document.querySelector('#demoModalStart').addEventListener('click', function () {
    document.querySelector('#demoModalShadow').style.display = 'flex';
});
  </script>
<table id="equipment" class="display" style="width:100%">
        <thead>
            <tr>
                <th>N</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
        <tfoot>
            <tr>
                <th>N</th>
            </tr>
        </tfoot>
    </table>
 
<script>
$(document).ready( function () {
function sleep(millis) {
    var t = (new Date()).getTime();
    var i = 0;
    while (((new Date()).getTime() - t) < millis) {
        i++;
    }
}
 
function progress() {
    document.querySelector('#demoModalShadow').style.display = 'flex';
console.log('progress');
}
 
var table_e = new DataTable("#equipment", {
searching: false,
    paging: false,
  "info": false,
  "processing": true,
            "columns": [
                {data: 'id'},
            ],
  "columnDefs": [{  
                  targets: [0], className: "dt-head-center dt-body-center",
                 "searchable": false,
                 "orderable": false,
                 "width": 100,
                 },
 
                 ],
 
    layout: {
        topStart: {
 
            buttons: [
                {
                    enabled: true,
                    text: "Test2",
                    action: function (e, dt, node, config)  
                    {
            progress();
                       console.log('111');
            sleep(5000);
/*                    $.ajax({
                            url: 'bild_terminal.php',        
                            method: 'post',      
                            dataType: 'html',    
                            async       : false,  
                            data: {ip: '172.31.0.3'},  
                async       : false,
                            success: function(data){  
                          alert(data);
                  }
                });*/
        console.log('222');
                    }
                },
            ]
        }
    }
});
}  
 
);
 
</script>
</body>
</html>
 
Убрал все, что только возможно. Вопрос, почему модальное окно при нажатии на кнопку Test2 появляется после паузы, а не перед и как это исправить?

Всего записей: 612 | Зарегистр. 03-10-2001 | Отправлено: 08:00 11-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon

Цитата:
Вопрос, почему модальное окно при нажатии на кнопку Test2 появляется после паузы

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

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 22:09 11-07-2025
Demon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
потому что ваш цикл не дает браузеру выполнить отрисовку.
js однопоточный.
если вы хотите выполнить с задержкой, то вам не sleep нужен, а, например, setTimeout

sleep поставлен для примера. В реальной задаче там стоит процедура AJAX, php скрипт выполняется достаточно долго, до 3-х минут. Нужно сделать отображение прогресса. И как такую задачу решать?

Всего записей: 612 | Зарегистр. 03-10-2001 | Отправлено: 07:47 12-07-2025 | Исправлено: Demon, 08:06 12-07-2025
TheBarmaley



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon
Цитата:
Нужно сделать отображение прогресса. И как такую задачу решать?
как минимум: https://yandex.ru/search/?text=js+progress-bar

----------
..the one of.. ··· ..sam-&-pol..

Всего записей: 18791 | Зарегистр. 07-06-2006 | Отправлено: 09:16 12-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon

Цитата:
И как такую задачу решать?

делаются отдельгые запросы к php скрипту, который возвращет процент обработки.
для этого нужно чтобы оба скрипта взаимодействовали друг с другом, передавая данные о прогрессе.
и для этого не нужно кидать в цикле.. используйте setTimeout или setInterval, в этом случае браузер сможет обрабатывать остальные элементы на странице.
нужно сделать диалог видимым через 5 секунд?
 
setTimeout(function() {
// нужный вам код
}, 5000);
 
и все

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 16:56 12-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, можно ли объединить id, чтобы они обрабатывались одной функцией. Для примера 2 клика (гиперссылки), у каждой свой id, поэтому пришлось делать 2 функции, а по факту их несколько десятков. Что лучше оставить div или ul ?
И можно для примера вместо гиперссылки привести пример с кнопкой (button) для разных id ?
 

Код:
 
<!DOCTYPE html>
<body>
 
<div id="list1">
<!-- <ul id="list1">-->
    <li><a href="#" data-value="http://.....">Stream1</a></li>
<!--</ul>-->
</div>
 
<div id="list2">
<!-- <ul id="list2">-->
    <li><a href="#" data-value="http://.....">Stream2</a></li>
<!--</ul>-->
</div>
 
</script>
//list1
list1.onclick = function(e) {
    e.preventDefault();
 
    var elm = e.target;
    var audio = document.getElementById('audio');
 
    var source = document.getElementById('audioSource');
    source.src = elm.getAttribute('data-value');
 
    audio.load();
    audio.play();
 
//list2
list2.onclick = function(e) {
    e.preventDefault();
 
    var elm = e.target;
    var audio = document.getElementById('audio');
 
    var source = document.getElementById('audioSource');
    source.src = elm.getAttribute('data-value');
 
    audio.load();
    audio.play();
</script>
</body>
 

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 21:16 24-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Что лучше оставить div или ul ?

<li> без <ul> или <ol> использовать нельзя.
 

Цитата:
поэтому пришлось делать 2 функции, а по факту их несколько десятков

а зачем вообще привязку делать к id? тем более жестко переписывая onclick.
 

Код:
const elements = document.querySelectorAll('.общий_класс');
elements.forEach(el => {
    el.addEventListener("click", event => {
        // обработка нажатия, el - элемент на который нажали, event - событие
    });
});


Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 22:02 24-07-2025 | Исправлено: Mavrikii, 22:08 24-07-2025
TheBarmaley



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
<li> без <ul> или <ol> использовать нельзя.
..скажем так - "неканонично", но можно. нигде/ничем не "запрещено", любой хтмл-элемент самодостаточен.)

Цитата:
const elements
дефиниция конст = лишнее, можно к квериселектору сразу прицепить форич. имхо.

----------
..the one of.. ··· ..sam-&-pol..

Всего записей: 18791 | Зарегистр. 07-06-2006 | Отправлено: 04:12 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
а зачем вообще привязку делать к id? тем более жестко переписывая onclick.  

Возможно чтобы не играли 2 элемента одновременно.  
Попробовал Ваш вариант, не исключено что где-то ошибся, клик не работает.
 

Код:
 
<div class="list-class">
<a href="#" data-value="http://....">Stream1</a>
</div>
 
<audio id="audioPlayer" controls="controls">
    <source id="audioSource" src=""></source>
</audio>
 
<script>
const elements = document.querySelectorAll('.list-class');
elements.forEach(elm => {
elm.addEventListener("click", (event) => {
// обработка нажатия, elm - элемент на который нажали
source.src = elm.getAttribute('data-value');
// возможно вот здесь ошибка или не хватает данных.
var elm = e.target;
var audioPlayer = document.getElementById('audioPlayer');
audioPlayer.load();
audioPlayer.play();
});
});
</script>
 

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 09:32 25-07-2025 | Исправлено: digital422, 09:33 25-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
не исключено что где-то ошибся, клик не работает

ну так у вас клик по div, у которого нет data-value.
зачем при этом элемент <a> внутри?
 

Код:
<div class="list-class" data-value="https://download.samplelib.com/mp3/sample-6s.mp3">
<a href="#">Stream1</a>
</div>
 
<audio id="audioPlayer" controls="controls">
    <source id="audioSource" src=""></source>
</audio>
 
<script>
const elements = document.querySelectorAll('.list-class');
elements.forEach(elm => {
   elm.addEventListener("click", (event) => {
      document.getElementById('audioSource').src = elm.getAttribute('data-value');
      const audioPlayer = document.getElementById('audioPlayer');
      audioPlayer.load();
      audioPlayer.play();
      return false;
   });
});
</script>


Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 09:52 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Благодарю, работает!
Еще одна задача - отобразить имя выбранного элемента в отдельной ячейке <table> </table> ? Использовать XMLHttpRequest или можно проще ?

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 10:40 25-07-2025 | Исправлено: digital422, 11:06 25-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
отобразить имя выбранного элемента в отдельной ячейке

а подробнее?
какого элемента?
 

Цитата:
Использовать XMLHttpRequest  

для чего?

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:00 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Например для:

Код:
<div class="list-class" data-value="https://download.samplelib.com/mp3/sample-6s.mp3">
<a href="#">Stream1</a>
</div>  

его нажали и  Stream1 появился в отдельной <td></td>.
 
Один из вариантов был экспортировать имя в txt файл и выводить через XMLHttpRequest, но она мне не нравится.
Если добавить кнопку в отдельной <td></td> div class надо дублировать ?

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 11:04 25-07-2025 | Исправлено: digital422, 11:06 25-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Один из вариантов был экспортировать имя в txt файл и выводить через XMLHttpRequest, но она мне не нравится.
 

зачем? что мешает взять текст ссылки вставить куда хочется?

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:06 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Ссылок несколько и при выборе должна быть индикация той ссылки (ее имя), которую выбрали. Т.е. должна быть динамическая ячейка.

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 11:14 25-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Ссылок несколько и при выборе должна быть индикация той ссылки (ее имя), которую выбрали. Т.е. должна быть динамическая ячейка.

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

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:15 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Примерно так, в div class добавляем имя и через script из предыдущего поста по аналогии с плеером выводим его в <td></td>.
 

Код:
 
<div class="list-class" data-value="http://..." name-station="Station1" >
 
<script>
const nameStation = document.getElementById('nameStation');
</script>
 
<td><span id="nameStation"></span></td>
 

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 11:44 25-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Код:
<style>
.list-class {
  cursor: pointer;
  color: blue;
  text-decoration: underline;
}
</style>
<div class="list-class" data-value="https://download.samplelib.com/mp3/sample-6s.mp3">
Stream1
</div>
 
<div class="list-class" data-value="https://download.samplelib.com/mp3/sample-6s.mp3">
Stream2
</div>
 
<div class="list-class" data-value="https://download.samplelib.com/mp3/sample-6s.mp3">
Stream3
</div>
<br>
<audio id="audioPlayer" controls="controls">
    <source id="audioSource" src=""></source>
</audio>
<div id='out'></div>
 
<script>
const elements = document.querySelectorAll('.list-class');
elements.forEach(elm => {
   elm.addEventListener("click", (event) => {
      document.getElementById('audioSource').src = elm.getAttribute('data-value');
      const audioPlayer = document.getElementById('audioPlayer');
      audioPlayer.load();
      audioPlayer.play();
      document.getElementById('out').innerHTML = elm.innerHTML;
      return false;
   });
});
</script>

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:46 25-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот этого и не хватало, сейчас при нажатии на гиперссылку есть нужный текст.
<div id='out'></div>  
document.getElementById('out').innerHTML = elm.innerHTML;  
 
Единственное - я убрал гиперссылку и добавил кнопку Play,  при нажатии на кнопку-появляется кнопка вместо текста ). В принципе смысл понятен, по аналогии попробую сделать с дополнительным полем в div class.

Всего записей: 382 | Зарегистр. 19-04-2003 | Отправлено: 12:00 25-07-2025
Vlimiik



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii

Цитата:
Код:

Что-то у меня не работает скрипт. Пытаюсь настроить Violent Monkey, расширение установил для Firefox, сначала нажал создать New Script, скопировал код скрипта, сохранил. Выбираю страницу для воспроизведения скрипта - google.com, созданный скрипт расширение не видет. Тогда я там жму Плюс (+), создаю скрипт для google.com. Теперь расширение видит скрипт, но выдает ошибку, что не может воспроизвести, так как скрипт имеет ошибки синтаксиса.
   
Что-то там в инструкции ещё было про сервер, короче не совсем понимаю принцип функционирования этой оснастки для воспроизведения скриптов .

Всего записей: 572 | Зарегистр. 11-08-2007 | Отправлено: 16:22 25-07-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru