Как остановить распространение события со встроенным атрибутом onclick?

Простую альтернативу этой проблеме можно решить, предоставив соответствующие разрешения в самой базе данных. Например: если вы используете базу данных mysql, введите в базу данных через терминал или предоставленный интерфейс и просто следуйте этой команде:

 GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password';

Это ограничит пользователя ограничиться только указанным запросом только. Удалите разрешение удаления, и поэтому данные никогда не будут удалены из запроса, запущенного с php-страницы. Второе, что нужно сделать, это очистить привилегии, чтобы mysql обновлял разрешения и обновления.

FLUSH PRIVILEGES; 

Дополнительная информация о flush .

To см. текущие привилегии для пользователя, вызывают следующий запрос.

select * from mysql.user where User='username';

Подробнее о GRANT .

296
задан Michał Perłakowski 20 January 2016 в 05:12
поделиться

5 ответов

Используйте event.stopPropagation () .

<span onclick="event.stopPropagation(); alert('you clicked inside the header');">something inside the header</span>

Для IE: window.event.cancelBubble = true

<span onclick="window.event.cancelBubble = true; alert('you clicked inside the header');">something inside the header</span>
250
ответ дан Munim Munna 23 November 2019 в 01:32
поделиться

Существует два способа получить объект-событие из функции:

  1. первый аргумент, в совместимом W3C браузере (Chrome, Firefox, Safari, IE9 +)
  2. window.event возражают в Internet Explorer (< =8)

, Если необходимо поддерживать браузеры прежней версии, которые не следуют рекомендациям W3C, обычно в функции, Вы использовали бы что-то как следующее:

function(e) {
  var event = e || window.event;
  [...];
}

, который проверил бы сначала один, и затем другой и хранилище, какой бы ни был найден в переменной события. Однако во встроенном обработчике событий нет e объект использовать. В этом случае необходимо использовать в своих интересах arguments набор, который всегда доступен и относится к полному набору аргументов, переданных функции:

onclick="var event = arguments[0] || window.event; [...]"

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

208
ответ дан Gareth 23 November 2019 в 01:32
поделиться

Следует иметь в виду, что window.event не поддерживается в FireFox, и поэтому это должно быть что-то вроде:

e.cancelBubble = true

Или, можно использовать стандарт W3C для FireFox:

e.stopPropagation();

, Если Вы хотите стать необычными, можно сделать это:

function myEventHandler(e)
{
    if (!e)
      e = window.event;

    //IE9 & Other Browsers
    if (e.stopPropagation) {
      e.stopPropagation();
    }
    //IE8 and Lower
    else {
      e.cancelBubble = true;
    }
}
80
ответ дан Community 23 November 2019 в 01:32
поделиться

Согласно эта страница , в IE Вам нужно:

event.cancelBubble = верный

5
ответ дан ajh1138 23 November 2019 в 01:32
поделиться

Я не могу прокомментировать из-за Кармы, таким образом, я пишу это как целый ответ: Согласно ответу Gareth (var e = аргументы [0] || window.event; [...]), я использовал эту остроту, встроенную на onclick для быстрого взлома:

<div onclick="(arguments[0] || window.event).stopPropagation();">..</div>

я знаю, что поздно, но я хотел сообщить, что это работает в одной строке. Фигурные скобки возвращают событие, которое имеет stopPropagation-функцию, присоединенную в обоих случаях, таким образом, я пытался инкапсулировать их в фигурных скобках как в, если и.... она работает.:)

0
ответ дан 23 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: