Как связать событие клика, если переключатель отключен? [Дубликат]

Другой способ выполнения задания - использовать аналитическую функцию MAX () в предложении OVER PARTITION

SELECT t.*
  FROM
    (
    SELECT id
          ,rev
          ,contents
          ,MAX(rev) OVER (PARTITION BY id) as max_rev
      FROM YourTable
    ) t
  WHERE t.rev = t.max_rev 

. Другое решение OVER PARTITION, уже зарегистрированное в этом сообщении, -

SELECT t.*
  FROM
    (
    SELECT id
          ,rev
          ,contents
          ,ROW_NUMBER() OVER (PARTITION BY id ORDER BY rev DESC) rank
      FROM YourTable
    ) t
  WHERE t.rank = 1 

Этот 2 SELECT хорошо работает на Oracle 10g.

191
задан Pierre de LESPINAY 9 July 2015 в 16:03
поделиться

9 ответов

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

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

<div style="display:inline-block; position:relative;">
  <input type="text" disabled />
  <div style="position:absolute; left:0; right:0; top:0; bottom:0;"></div>
</div>​

jq:

$("div > div").click(function (evt) {
    $(this).hide().prev("input[disabled]").prop("disabled", false).focus();
});​

Пример: http://jsfiddle.net/RXqAm/170/ (обновлено для использования jQuery 1.7 с prop вместо attr).

219
ответ дан Andy E 31 August 2018 в 17:09
поделиться

здесь также выглядит хорошим кандидатом на этот вопрос

Выполнение события click на отключенном элементе? Javascript jQuery

jQuery('input#submit').click(function(e) {
    if ( something ) {        
        return false;
    } 
});
-2
ответ дан Community 31 August 2018 в 17:09
поделиться

Отключенные элементы «едят» клики в некоторых браузерах - они не отвечают на них и не позволяют захватить их обработчиками событий в любом элементе или в любом из его контейнеров.

IMHO - самый простой, Самый чистый способ «исправить» это (если вам действительно нужно зафиксировать клики на отключенных элементах, таких как OP), просто добавьте следующий CSS на вашу страницу:

input[disabled] {pointer-events:none}

Это сделает любой клики на отключенном входе попадают в родительский элемент, где вы можете их захватить в обычном режиме. (Если у вас есть несколько отключенных входов, вы можете поместить их в отдельный контейнер самостоятельно, если они еще не выложены таким образом - дополнительный <span> или <div>, скажем - просто сделать это


Недостатком является то, что этот трюк, к сожалению, не будет работать для старых браузеров, которые не поддерживают свойство CSS pointer-events. Он должен работать от IE 11, FF v3.6, Chrome v4): caniuse.com/#search=pointer-events

Если вам нужно поддерживать старые браузеры, Вам нужно будет использовать один из других ответов!

34
ответ дан Doin 31 August 2018 в 17:09
поделиться

Возможно, вы можете сделать поле readonly и отправить submit, чтобы отключить все поля readonly

$(".myform").submit(function(e) {
    $("input[readonly]", this).attr("disabled", true);
});

, а вход (+ script) должен быть

<input type="text" readonly="readonly" name="test" value="test" />

$('input[readonly]').click(function () {
    $(this).removeAttr('readonly');
})
58
ответ дан Josh Crozier 31 August 2018 в 17:09
поделиться

Вместо disabled вы можете использовать readonly. С помощью некоторого дополнительного CSS вы можете стилизовать ввод так, чтобы он выглядел как поле disabled.

На самом деле есть еще одна проблема. Событие change запускается только тогда, когда элемент теряет фокус, что не является логическим с учетом поля disabled. Возможно, вы вставляете данные в это поле из другого вызова. Для выполнения этой работы вы можете использовать событие «bind».

$('form').bind('change', 'input', function () {
    console.log('Do your thing.');
});
3
ответ дан mnille 31 August 2018 в 17:09
поделиться

Я нахожу другое решение:

<input type="text" class="disabled" name="test" value="test" />

Класс «отключен» immitate отключенный элемент по непрозрачности:

<style type="text/css">
    input.disabled {
        opacity: 0.5;
    }
</style>

И затем отмените событие, если элемент отключен, и удалить класс :

$(document).on('click','input.disabled',function(event) {
    event.preventDefault();
    $(this).removeClass('disabled');
});
-1
ответ дан npth 31 August 2018 в 17:09
поделиться

$(function() {

  $("input:disabled").closest("div").click(function() {
    $(this).find("input:disabled").attr("disabled", false).focus();
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<div>
  <input type="text" disabled />
</div>

7
ответ дан Rejeesh Prarath 31 August 2018 в 17:09
поделиться

Я бы предложил альтернативу - используйте CSS:

input.disabled {
    user-select : none;
    -moz-user-select : none;
    -webkit-user-select : none;
    color: gray;
    cursor: pointer;
}

вместо отключенного атрибута. Затем вы можете добавить свои собственные атрибуты CSS для имитации отключенного ввода, но с большим контролем.

13
ответ дан Ron Reiter 31 August 2018 в 17:09
поделиться

ИЛИ сделайте это с помощью jQuery и CSS!

$('input.disabled').attr('ignore','true').css({
    'pointer-events':'none',
     'color': 'gray'
});

Таким образом, вы отключите элемент, и никакие события указателя не будут срабатывать, но он позволяет распространять, и если они отправлены, вы можете использовать атрибут «игнорировать» ', чтобы игнорировать его.

4
ответ дан sidonaldson 31 August 2018 в 17:09
поделиться
Другие вопросы по тегам:

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