Проверка одного или другого - PullRequest
0 голосов
/ 13 января 2009

Я создал функцию javascript, которая позволяет мне проверять, заполнено ли одно или другое поле (вызывается, достаточно шокирующе, oneortheother). По сути, он проверяет, заполнен ли ни один, или оба, и выдает ошибку.

Одним из проверяемых полей является поле input type="file". Я отображаю под полем существующий файл, чтобы пользователи могли видеть, нужен ли им этот файл.

Есть ли способ по-прежнему проверять с помощью oneortheother, не имея значения в input type="file"? Какие-нибудь хитрости JavaScript?

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

EDIT:

По запросу, вот несколько примеров:

<label for="pdf">Upload PDF:
<span class="fieldnote">Files of type .pdf</span>
</label>
<input type="file" name="pdf" id="pdf" class="external_form_field oneortheother_url" value="/downloads/white_papers/HigherOrderPerl.pdf"  />
<label>Existing file:</label><span class="preview"><a href="/downloads/white_papers/HigherOrderPerl.pdf" target="_blank">HigherOrderPerl.pdf</a></span>
<label for="url">Link to asset:</label>
<input type="text" name="url" id="url" class="external_form_field oneortheother_pdf" value=""  size="25" />

Обратите внимание, что применяются классы oneortheother_url и oneortheother_pdf. Это позволяет подпрограмме проверки знать, с каким полем сравнивать. Сравнение:

if (fObj.value && fObj2.value) { }

и

if (!fObj.value && !fObj2.value) { }

Ответы [ 5 ]

4 голосов
/ 13 января 2009

Я, к сожалению, не смог понять реальный вопрос, но вот подсказка на боковой панели:

Оператор XOR может оказаться полезным (хотя и неясным) в таких случаях:

if (fObj.value ^ fObj2.value) {
    // Only one value is set, we're good
} else {
    // Both of them are set or neither of them are set
}
1 голос
/ 13 января 2009

Я не уверен, как работает ваша функция проверки, но похоже, что вы могли бы добавить скрытый ввод, который содержит URL загруженного файла предварительного просмотра ИЛИ значение в файле ввода. Тогда вы можете просто сравнить ввод URL со скрытым вводом.

Но, похоже, вам просто нужно написать собственную функцию проверки.

0 голосов
/ 13 января 2009

Я не совсем уверен, что именно вы пытаетесь сделать здесь, но вы можете добавить скрытое поле формы, а затем прикрепить функцию к событиям ввода файла и событиям onchange ввода URL-адреса, которая установит скрытое поле для этого значения.

По сути, я даже не уверен, что подход, который вы используете в данный момент, уместен - например, Firefox 3 не позволяет вам редактировать содержимое поля файла напрямую, и, насколько я могу судить, не дает вам способ "сбросить" значение. Таким образом, после того, как файл был выбран, ввод "pdf" будет всегда ненулевым, что с установленными вами ограничениями (насколько я понимаю) означает, что ввод "url" фактически отключен навсегда , Это еще хуже, поскольку вы даете входному файлу начальное значение, чтобы оно никогда не было пустой строкой.

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

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

0 голосов
/ 13 января 2009

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

0 голосов
/ 13 января 2009

Я не уверен, что полностью понимаю ваш вопрос, так как он мне не понятен.

Вы хотите проверить это:

if (fObj.value && fObj2.value) {}

и

if (!fObj.value && !fObj2.value) {}

Так почему бы не добавить и это ...

if (fObj.value && !fObj2.value) {}

или

if (!fObj.value && fObj2.value) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...