Как я препятствую тому, чтобы onclick событие родителя стреляло, когда дочерняя привязка нажата?

PostgreSQL не определяет round(double precision, integer). По причинам, которые @Catcall объясняет в комментариях, версия раунда, которая принимает точность, доступна только для numeric.

regress=> SELECT round( float8 '3.1415927', 2 );
ERROR:  function round(double precision, integer) does not exist

regress=> \df *round*
                           List of functions
   Schema   |  Name  | Result data type | Argument data types |  Type  
------------+--------+------------------+---------------------+--------
 pg_catalog | dround | double precision | double precision    | normal
 pg_catalog | round  | double precision | double precision    | normal
 pg_catalog | round  | numeric          | numeric             | normal
 pg_catalog | round  | numeric          | numeric, integer    | normal
(4 rows)

regress=> SELECT round( CAST(float8 '3.1415927' as numeric), 2);
 round 
-------
  3.14
(1 row)

(В приведенном выше примечании обратите внимание, что float8 является просто сокращенным псевдонимом для double precision. Вы можете видеть, что PostgreSQL расширяет его на выходе).

Вы должны указать значение, округленное до numeric, для использования двухфакторной формы round. Просто добавьте ::numeric для стенографического броска, например round(val::numeric,2).


Если вы форматируете для отображения пользователю, не используйте round. Используйте to_char (см. функции форматирования типа данных в руководстве), который позволяет указать формат и дает результат text, на который не влияет какая бы странность, на которую может повлиять ваш язык клиента с значениями numeric. Например:

regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
    to_char    
---------------
 3.14
(1 row)

to_char будет округлять числа для вас как часть форматирования. Префикс FM сообщает to_char, что вы не хотите добавлять пробелы с ведущими пробелами.

313
задан Jonathon Watney 2 September 2009 в 17:52
поделиться

6 ответов

События всплывают в наивысшую точку в DOM, к которой было прикреплено событие щелчка. Итак, в вашем примере, даже если у вас не было других явно кликабельных элементов в div, каждый дочерний элемент div будет пузырить свое событие щелчка вверх по DOM до тех пор, пока его не улавливает обработчик события щелчка DIV.

два решения - проверить, кто на самом деле инициировал событие. jQuery передает объект eventargs вместе с событием:

$("#clickable").click(function(e) {
    var senderElement = e.target;
    // Check if sender is the <div> element e.g.
    // if($(e.target).is("div")) {
    window.location = url;
    return true;
});

Вы также можете прикрепить обработчик события щелчка к вашим ссылкам, который сообщит им остановить всплытие событий после выполнения их собственного обработчика:

$("#clickable a").click(function(e) {
   // Do something
   e.stopPropagation();
});
421
ответ дан 23 November 2019 в 01:06
поделиться

Встроенная альтернатива:

<div>
    <!-- Other content. -->
    <a onclick='event.stopPropagation();' href="http://foo.com">I don't want #clickable to handle this click event.</a>
</div>
1
ответ дан 23 November 2019 в 01:06
поделиться
<a onclick="return false;" href="http://foo.com">I want to ignore my parent's onclick event.</a>
-5
ответ дан 23 November 2019 в 01:06
поделиться

добавить a следующим образом:

<a href="http://foo.com" onclick="return false;">....</a>

или return false; из обработчика кликов для #clickable , например:

  $("#clickable").click(function() {
        var url = $("#clickable a").attr("href");
        window.location = url;
        return false;
   });
-3
ответ дан 23 November 2019 в 01:06
поделиться

Используйте метод stopPropagation , см. Пример:

$("#clickable a").click(function(e) {
   e.stopPropagation();
});

Как сказано в документации jQuery:

метод stopPropagation предотвращает всплытие события в DOM tree, не позволяя родительским обработчикам получать уведомления о событии.

Имейте в виду, что это не запрещает другим слушателям обрабатывать это событие (например, более одного обработчика щелчка для кнопки), если это нежелательный эффект, вместо него вы должны использовать stopImmediatePropagation .

93
ответ дан 23 November 2019 в 01:06
поделиться

Вам нужно остановить событие от достижения (всплытия) родителя (div). См. Часть о всплытии здесь и информацию об API для jQuery здесь .

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

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