Другой способ выполнения задания - использовать аналитическую функцию 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.
Отключенные элементы не запускают события мыши. Большинство браузеров будут распространять событие, происходящее из отключенного элемента, на дерево 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
).
здесь также выглядит хорошим кандидатом на этот вопрос
Выполнение события click на отключенном элементе? Javascript jQuery
jQuery('input#submit').click(function(e) {
if ( something ) {
return false;
}
});
Отключенные элементы «едят» клики в некоторых браузерах - они не отвечают на них и не позволяют захватить их обработчиками событий в любом элементе или в любом из его контейнеров.
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
Если вам нужно поддерживать старые браузеры, Вам нужно будет использовать один из других ответов!
Возможно, вы можете сделать поле 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');
})
Вместо disabled
вы можете использовать readonly
. С помощью некоторого дополнительного CSS вы можете стилизовать ввод так, чтобы он выглядел как поле disabled
.
На самом деле есть еще одна проблема. Событие change
запускается только тогда, когда элемент теряет фокус, что не является логическим с учетом поля disabled
. Возможно, вы вставляете данные в это поле из другого вызова. Для выполнения этой работы вы можете использовать событие «bind».
$('form').bind('change', 'input', function () {
console.log('Do your thing.');
});
Я нахожу другое решение:
<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');
});
$(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>
Я бы предложил альтернативу - используйте CSS:
input.disabled {
user-select : none;
-moz-user-select : none;
-webkit-user-select : none;
color: gray;
cursor: pointer;
}
вместо отключенного атрибута. Затем вы можете добавить свои собственные атрибуты CSS для имитации отключенного ввода, но с большим контролем.
ИЛИ сделайте это с помощью jQuery и CSS!
$('input.disabled').attr('ignore','true').css({
'pointer-events':'none',
'color': 'gray'
});
Таким образом, вы отключите элемент, и никакие события указателя не будут срабатывать, но он позволяет распространять, и если они отправлены, вы можете использовать атрибут «игнорировать» ', чтобы игнорировать его.