Подтвердить что ты не робот

IE требует двойного щелчка с помощью настраиваемой кнопки

У меня есть script, который погружается как:

HTML:

<div id="wrapper">
     <div id="container">
        <div id="button">Click me!</div>
        <form>
            <input type="file" />
        </form>
      </div>
     <div id="notice">File is uploaded!</div>
</div>

JavaScript (JQuery 2):

$(document).ready(function () {
    $("input").on("change", function () {
       $("div#notice").fadeIn();
        //$("form").submit(); //If you want it to submit on your site uncomment this
    });
 });

CSS

div#wrapper {
    background-color: #ccc;
    position: absolute;
    width: 300px;
    height: 200px;
}
div#wrapper > form > input {
    color: rgba(0, 0, 0, 0);
    zoom: 1;
    filter: alpha(opacity=0);
    opacity: 0;
    color: rgba(0, 0, 0, 0);
 }
div#container {
    width: 200px;
    height: 20px;
    overflow: hidden;
}
div#button, input {
    position: absolute;
    top: 0px;
    left: 0px;
    cursor: pointer;
 }
div#button {
    z-index: 1;
    background-color: #AAA;
 }
input {
    z-index: 2;
    background-color: rgba(0, 0, 0, 0);
    opacity: 0;
    alpha: filter(opacity=0);
    font-size: 25px;
    color: rgba(0,0,0,0);
    filter: alpha(opacity=0);
    zoom: 1;
 }
div#notice
{
    background-color: green;
    display: none;
    position: absolute;
    bottom: 0px;
    left: 0px;
 }

Примечание. Эта проблема возникла до того, как было размыто, чтобы скрыть мигающий значок в IE.

В Chrome и Firefox кнопка требует только одного клика. В IE 10 требуется двойной щелчок, который я не хочу. Я пытаюсь думать о способе сделать его одним кликом.

Единственное, что я пробовал до сих пор, это .render("click") на входе, но это не сработало.

JSFiddle: http://jsfiddle.net/plowdawg/mk77W/

4b9b3361

Ответ 1

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

<div class="divFileUpload">
    <input class="fileUpload" type="file" />
</div>

и css:

.divFileUpload {
    background-color: #F60;
    border-radius: 5px;
    height: 50px;
    margin-left: auto;
    margin-right: auto;
    overflow: hidden;
    position: relative;
    width: 50%
}
.fileUpload {
    cursor: pointer;
    font-size: 10000px; /* This is the main part. */
    height: 100%;
    opacity: 0;
    position: absolute;
    right: 0;
    top: 0;
    width: 100%
}

Ответ 2

Чтобы следить за тем, что SDLion сказал....
Это может быть то, что вы видите
This is what you see
Но на самом деле есть элемент управления загрузкой файлов, который стал прозрачным. But really on top of that there is a file upload control that has been made transparent.
Нажатие на кнопку обзора открывает диалог загрузки файлов одним щелчком мыши. В IE Вам нужно дважды щелкнуть текстовое поле слева от него, если вы хотите увидеть диалог загрузки файла.

Увеличить размер шрифта входного файла, чтобы заполнить изображение кнопки
Increase the font size of the file input to fill the button image

Ответ 3

В то время как @bastos.sergio прав, что это происходит в текстовом разделе, есть способ обойти это, если вам удобно использовать JavaScript.

Вам понадобится

  • Тег div обертки
  • Внутренний тег dev
  • Некорректный ввод формы
  • JQuery (проверено на 2.1)

Шаги:

  • Создайте "обертку" div
  • Создайте внутреннюю кнопку "div"
  • Поместите элемент формы под внутренним "button" div
  • Установите "обертку" и "внутренние" divs одинакового размера
  • Установите overflow:hidden на обертке
  • Создайте JQuery script для параметра "внутренний" div для функции "щелчок"
  • Во внутренней функции нажмите кнопку вызова .click() на входе

Кажется, работает для меня в IE 10.

$(document).ready(
    function()
    {
        $("#open_dialog").on("click",function()
                                {
                                    $("input").click();
                                });
        $("input").on("change",function()
                      {
                          alert($("input"));
                          $("#notice").html("uploading");
                      });
    });
#open_dialog
{
    position: relative;
    width: 200px;
    height: 50px;
    color: white;
    font-family: "Arial";
    font-size: 14pt;
    text-align: center;
    top: 25px;
    margin-top: -.5em;
    z-index: 1;
}

#wrapper
{
    width: 200px;
    height: 50px;
    overflow: hidden;
    cursor: pointer;
    border-radius: 10px;
    background: green;
    z-index: 0;
}
input
{
  margin-top: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
    <div id="open_dialog">Click Me</div>
    <input type="file" />
</div>
<div id="notice">Nothing to upload</div>

Ответ 4

Двойной щелчок происходит в текстовой части загрузки файла, например, @TravisPessetto.

Поскольку невозможно скрыть/удалить текстовую часть из элемента управления вводом файлов, я рекомендую вам поместить правильную кнопку над вводом файла.

Подробнее см. здесь.

Ответ 5

Я нашел еще одно простое решение, просто запускаю событие "click" только для этого элемента:

$("input").mousedown(function() {
    $(this).trigger('click');
})

чтобы избежать проблем с другими браузерами, примените это решение только к IE:

if ($.browser.msie && parseInt($.browser.version, 10) > 8) {
    $("#your_file_input").mousedown(function(event) {
        if (event.which == 1) {
            $(this).trigger('click');
        }
    })
}

здесь ваш измененный jfiddle, проверьте его на IE 9-10: http://jsfiddle.net/7Lq3k/

Изменить: пример изменен, чтобы ограничить обработку событий только для левого клика (см. Как отличить левый и правый щелчок мыши с jQuery для деталей)

Ответ 6

Я смешал различные решения, чтобы получить тот, который работает для меня (в каждом браузере). Он написан с использованием ЛЮБОГО вложенности.

HTML

<!--/* Upload input */-->
<div class="input-file">
  Select image
  <input type="file" />
</div>

МЕНЬШЕ CSS

/*
* Input "file" type Styling
* Based on http://goo.gl/07sCBA
* and http://stackoverflow.com/a/21092148/1252920
*/
.input-file {
  position: relative;
  overflow: hidden;
  margin: 10px;

  input[type="file"] {
    opacity: 0;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: 0;
    padding: 0;
    cursor: pointer;
    width: 100%;
    height: 100%;
    font-size: 10000px;
  }

  // For Chrome
  input[type=file]::-webkit-file-upload-button {
    cursor: pointer;
  }
}