Два поля и два события ...
Вы можете написать один «обработчик» для этого. Просто используйте метод .on()
, который позволяет связывать много событий (здесь keyup
и change
). Затем, в сравнении, проверьте оба значения. Если один или другой пуст, отключите кнопку.
$(function() {
$('#searchInput, #selectBox').on('keyup change',function() {
if ($('#searchInput').val() == '' || $('#selectBox').val() == '') {
$('.enableOnInput').prop('disabled', true);
} else {
$('.enableOnInput').prop('disabled', false);
}
});
})
Это можно даже записать короче, поместив условие непосредственно во второй истинный / ложный аргумент .prop()
:
$(function() {
$('#searchInput, #selectBox').on('keyup change',function() {
$('.enableOnInput').prop('disabled', ($('#searchInput').val() == '' || $('#selectBox').val() == ''));
});
})
На случай, если это может помочь кому-то другому, ниже приведен файл конфигурации ADPlus , который я придумал. Глядя на это сейчас, я не уверен, что! Runaway имеет какой-либо эффект. Прикрепляется, когда выполняется приложение ASP.NET, которое генерирует исключение StackOverflowException, это создает файлы .dmp «1-й шанс StackOverflow full» и «1-й шанс полного завершения процесса» в указанном OutputDir. Откройте первый файл с помощью Windbg и запустите «.loadby sos mscorwks», за которым следует «! Clrstack», чтобы узнать, что могло вызвать переполнение стека.
<ADPlus>
<Settings>
<RunMode>CRASH</RunMode>
<OutputDir>C:\Dumps</OutputDir>
<ProcessName>w3wp.exe</ProcessName>
</Settings>
<Exceptions>
<Option>FullDumpOnFirstChance</Option>
<Option>MiniDumpOnSecondChance</Option>
<Option>NoDumpOnFirstChance</Option>
<Option>NoDumpOnSecondChance</Option>
<Config>
<Code>AllExceptions</Code>
<Actions1>Void</Actions1>
<Actions2>Void</Actions2>
<ReturnAction1>GN</ReturnAction1>
<ReturnAction2>GN</ReturnAction2>
</Config>
<Config>
<!--
av = AccessViolation
ch = InvalidHandle
ii = IllegalInstruction
dz = IntegerDivide
c000008e = FloatingDivide
iov = IntegerOverflow
lsq = InvalidLockSequence
sov = StackOverflowException
eh = CPlusPlusEH
* = UnknownException
clr = NET_CLR
bpe = CONTRL_C_OR_Debug_Break
ld = DLL_Load
ud = DLL_UnLoad
epr = Process_Shut_Down
sbo = Stack_buffer_overflow
-->
<Code>sov;sbo</Code>
<Actions1>Log;Time;Stack;FullDump;EventLog</Actions1>
<CustomActions1>!runaway</CustomActions1>
<Actions2>Log;Time;Stack;FullDump;EventLog</Actions2>
<CustomActions2>!runaway</CustomActions2>
<!--
G = go
GN = go unhandled exception
GH = go handled exception
Q = quit
QD = quit and detach
-->
<ReturnAction1>GN</ReturnAction1>
<ReturnAction2>GN</ReturnAction2>
</Config>
<Config>
<Code>clr</Code>
<Actions1>Void</Actions1>
<Actions2>Log;Time;Stack;FullDump;EventLog</Actions2>
<ReturnAction1>GN</ReturnAction1>
<ReturnAction2>GN</ReturnAction2>
</Config>
<Config>
<Code>epr</Code>
<Actions1>Log;Time;Stack;FullDump;EventLog</Actions1>
<Actions2>Void</Actions2>
<ReturnAction1>GN</ReturnAction1>
<ReturnAction2>GN</ReturnAction2>
</Config>
</Exceptions>
</ADPlus>
<ADPlus> <!-- Add log entry, log faulting thread stack and dump full on first chance StackOverflow --> <Exceptions> <Config> <!-- This is for the stack buffer overflow exception --> <!-- Use sov for stack overflow exception --> <Code> sbo </Code> <Actions1> Log;Stack;FullDump </Actions1> <!-- Depending on what you intend - either stop the debugger (Q or QQ) or continue unhandled (GN) --> <ReturnAction1> GN </ReturnAction1> < Config> </Exceptions> </ADPlus>
Сохраните это в stackoverflow.cfg
Затем вы можете перейти:
adplus -c stackoverflow.cfg
Редактировать: оба sov и sbo являются исключениями переполнения стека. Я думаю, что нужно экспериментировать с обоими, так как мне не совсем понятно, в чем разница между ними. (может sbo обозначать неверный вызов alloca ()?)