JavaScript: ввод файла по щелчку предотвращает изменение, если пользователь отменяет подтверждение ()

Как предотвратить изменение элемента ввода файла формы с помощью события DOM onclick при использовании метода подтверждения ()?

В примере я хочу дать пользователю возможность не потерять значение элемента ввода файла, спросив их, хотят ли они OK | отменить, если они нажмут кнопку «Отмена», диалоговое окно файла не должно отображаться.

XHTML

<input name="post_file" onclick="images_change();" type="file" value="" />

JavaScript

function images_change()
{
 var answer = confirm('Okay or cancel, if you cancel no dialog window will be displayed.');

 if (answer)
 {
  answer = true;
  //previous item previews deleted here in a while loop.
 }
 else {answer = false;}

 return answer;
}

person John    schedule 03.04.2012    source источник
comment
В порядке. Вы почти у цели, просто верните значение confirm, см. мой ответ ниже.   -  person gdoron is supporting Monica    schedule 03.04.2012
comment
@John Если вам нужно больше из ваших ответов, чем то, что вы сейчас спрашиваете -- [...] Мне нужно выполнить какой-то другой сценарий поверх этого. -- вы должны отредактировать свой вопрос, чтобы включить это.   -  person Jonathan Lonowski    schedule 03.04.2012
comment
Колин, не добавляйте лишних пробелов.   -  person John    schedule 03.04.2012


Ответы (3)


Почему бы просто не встроить его, если у вас есть один входной файл?

HTML:

<input name="post_file" onclick="return check()" type="file" value="" />​

JavaScript:

function check() {
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.');
}​

пример jsFiddle.

person j08691    schedule 03.04.2012
comment
Почему вы предлагаете ему использовать встроенные скрипты? - person gdoron is supporting Monica; 03.04.2012
comment
Можно вызвать только функцию, встроенные сценарии - это не то, что я могу сделать, хотя спасибо за ответ. - person John; 03.04.2012
comment
Если это всего лишь один файл, то в этом нет ничего плохого. Если ему нужно повторно использовать его, то я вижу смысл в его разделении. - person j08691; 03.04.2012

Вам нужно вернуть результат confirm и вернуть результат функции:

<input name="post_file" onclick=" return images_change();" type="file" value="" />​

function images_change() {
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.');
}

РЕАЛЬНАЯ ДЕМО

person gdoron is supporting Monica    schedule 03.04.2012
comment
В основном то же самое, что и j08691. - person ; 03.04.2012
comment
Это выглядит хорошо, хотя проблема в том, что если скрипт возвращает true, мне нужно выполнить какой-то другой скрипт поверх этого. - person John; 03.04.2012

person    schedule
comment
e.preventDefault(); оооочень полезно и круто. Спасибо. Я хотел этого раньше, но не нашел его в подобных вопросах SO. - person goamn; 17.02.2017