#javascript
#javascript
Вопрос:
Я создал кнопку, которая, надеюсь, разрешает отправку только после нажатия на нее (здесь код).
-
InnerHTML
Представляет ли использование угрозу безопасности? (Я смотрел онлайн-курс, которогоInnerHTML
следовало избегать) -
Когда я отключаю указатели / курсоры, кажется, что кнопки сбрасываются
CSS
, и мне приходится снова вводитьinline CSS
для кнопкиJavascript
. Почему это так?Результаты
function change_button() { document.getElementById('get-results').innerHTML = 'Processing....'; document.getElementById('get-results').style.cssText = 'pointer-events:none !important;cursor:not-allowed !important; height: 44px; color:#fff; font-size:18px; padding: 9px 20px; background-color: #000; display:inline-block; padding-right: 20px;' }
Комментарии:
1. Для номера 2 это потому, что вы устанавливаете весь CSS этого элемента только для событий указателя (хотя в этом примере вы добавили дополнительные элементы обратно). Без дополнительных вещей эта строка будет делать это: {color: #334466;width: 12px;} —> {pointer-events:none;} поскольку это перезаписало бы весь объект стиля CSS с помощью этого одного набора правил CSS.
2. Итак, возможно ли добавить новые события указателя / CSS курсора в JS без сброса стиля кнопок? Пожалуйста, разветвите и покажите в Codepen, если это действительно возможно.
3. Да, вы можете. Используйте element.style.backgroundColor = ‘#334466’; Замените нужное вам свойство. Смотрите: kirupa.com/html5/setting_css_styles_using_javascript.htm
Ответ №1:
Вероятно, лучше просто установить для кнопки значение disabled, что должно предотвратить дальнейшие нажатия, и вам также не нужно будет возиться с вашим CSS. Как упоминалось в комментариях, ваш текущий код стирает существующие стили, примененные к кнопке.
Тем не менее, я бы все равно внедрил механизм на стороне сервера, чтобы предотвратить двойную обработку ваших отправленных данных, поскольку могут быть другие способы, которыми может произойти дублирование отправки, например, обновление браузера.
Что касается рисков безопасности, связанных с использованием innerHTML, я не знаю ни о каких в этом случае… Можете ли вы подробнее рассказать о том, какие риски вас беспокоят?
Кстати, передача ссылки на «this» в вашем onclick дает вам простой способ ссылаться на нажатую кнопку без необходимости использовать getElementById .
function change_button(btn) {
btn.disabled = true;
btn.innerHTML = "Processing...";
}
<button type="button" onclick="change_button(this);" style="cursor: pointer; height: 44px; color:#fff; font-size:18px; padding: 9px 20px; background-color: #000; display:inline-block; padding-right: 20px;" id="get-results">Results</button>
Комментарии:
1. Можно ли использовать innerHTML? Никаких рисков для безопасности или чего-либо еще (или это рискованно только при вводе на стороне клиента. например. Кто-нибудь вводит что-то в поле ввода и т. Д.)
2. Я не вижу, как может быть какая-либо угроза безопасности, связанная с заменой innerHTML простой строковой константой («Обработка …»). Я уверен, что могут быть последствия для безопасности, если содержимое содержит разметку / скрипт и / или было взято из пользовательского ввода. Это применимо везде, где используется этот тип содержимого, однако это не имеет особого отношения к свойству innerHTML.