Ошибка ввода с клавиатуры на Galaxy S2 с использованием jQuery Mobile и Phonegap - программирование
Подтвердить что ты не робот

Ошибка ввода с клавиатуры на Galaxy S2 с использованием jQuery Mobile и Phonegap

Мы разрабатываем мобильное веб-приложение в jQuery Mobile 1.0.1 и Phonegap 1.4.1 и сталкиваемся с проблемами с клавиатурой на галактике s2.

У нас есть меню, которое открывается и содержит вход для поиска:

<input type="search" placeholder="Search..." name="search" id="menu_search" data-role="none" />

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

Если мы сфокусируем вход при открытии меню: $("#menu_search").focus() - клавиатура поиска открыта, когда отображается меню, и мы можем искать НО, как только мы нажимаем на вход, клавиатура переходит на обычную клавиатуру, и мы неспособный напечатать что-либо.

Другая подсказка заключается в том, что при наборе текста на клавиатуре выполняется автоматическое предсказание, но при нажатии на правильную опцию на вход добавляется только пробел и ни один из других символов.

Мы попробовали кучу других атрибутов на входе поиска безрезультатно:

<input type="search" placeholder="Search..." name="search" id="menu_search" value="" data-role="none" autocomplete="off" autocorrect="off" autocapitalization="off" role="textbox" aria-autocomplete="list" aria-haspopup="true" style="-webkit-appearance:searchfield;" class="ui-autocomplete-input" />

Все это отлично работает на HTC Desire под управлением 2.2 и желание запускать CM7 (Android 2.3.7)

Мы даже попытались изменить ввод в текстовое поле, но это почти то же самое: (

Я также пробовал:

$("#menu_search").live('focus',function(event){
   event.preventDefault();
});

чтобы убедиться, что это не позволит ему сменить клавиатуру, но не повезло.

Однако у нас есть другой поиск в другом месте приложения, который отлично работает, с той лишь разницей, что другой поиск находится на странице "propper": data-role="page", а меню находится за пределами всех других страниц и в его собственный, только что установленный в скрытый исход.

Пожалуйста, помогите, im плачет кровь atm!

4b9b3361

Ответ 1

Вероятно, у вас

-webkit-user-select: none;

В вашем CSS где-нибудь. Если вы включите выбор текста для ввода

input, textarea { -webkit-user-select: text; }

он снова работает!

Ответ 2

Вы пытались добавить атрибут data-native-menu = "false" в свой тег ввода поиска.

Ответ 3

Если вы все еще застряли на этом, попробуйте обновить до phonegap 2.0. Он исправляет некоторые проблемы с вводом.

Ответ 4

$('#pageid').live('pageshow', function(event, ui) {
    $(this).delegate('input[data-type="search"]', 'keyup', function () {
      if($(this).val().length != 0)
        keyword = $(this).val();

    });
 });

Ответ 5

Создайте приложение с помощью phonegap + jequery, которое вы ищете в playStore "AssignmentReminder" или введите поле поиска koshWTF. так или иначе. Я бы рекомендовал эту проблему раньше и не исправил ее, так как я думаю, ее проблема 4.0.1, а не разрыв в телефоне или jQuery mobile, потому что я все еще могу печатать под 4.0.4 и меньше. надеюсь, что вы найдете ответ на него, потому что я в последний раз искал aloot и не смог его найти.

Ответ 6

У меня/была такая же проблема в моей версии Note II 4.1.1, основанной на использовании Phonegap 2.6.0 (хотя я также могу ее воспроизвести в версии 2.5.0), jQuery Mobile 1.2.0 и jQuery 1.7.2. Моя клавиатура SwiftKey 4.0.1.128.

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

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

Я попытался получить справку об этой ошибке на форуме jQuery Mobile, но они дали мне некоторый snarky комментарий о том, как это скорее всего использование моего идентификатора элемента, потому что, по-видимому, 99% (возможно, даже не реалистичные) ошибок JQM являются неправильными Использование идентификатора. Я знаю, что мои идентификаторы уникальны на каждой странице, но они настаивают на ошибке ID, даже не пытаясь правильно диагностировать проблему, но я отвлекаюсь.

Следует также отметить, что я нашел решение CSS, которое было предоставлено в другом ответе во многих других подобных проблемах в Интернете, но не в этой конкретной проблеме; хотя я понимаю его использование, CSS не исправил эту проблему для меня.

Моя форма динамически загружается в data-role = "content" DIV внутри data-role = "page" DIV, поэтому:

<div data-role="page">
    <div data-role="content" id="my-form-holder">
    </div>
</div>

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

<form id="account-add" action="add-edit-account.php" method="post" data-ajax="false" autocomplete="off">
    <div data-role="fieldcontain" class="ui-hide-label">
        <label for="custom-name">
        </label>
        <input name="custom-name" placeholder="Account Name" value="Service Name Here" type="text"><br>

        <label for="custom-1">
        </label>
        <input name="custom-1" placeholder="User ID" type="text"><br>

        <label for="custom-2">
        </label>
        <input name="custom-2" placeholder="Password" type="password"><br>

        <input type="hidden" name="action" value="add-2">
        <input type="hidden" name="newserviceid" value="3">
        <input type="hidden" name="userid" value="1">
        <input id="account-add-submit" type="submit" name="account-add-submit" value="Add Account">
    </div>
</form>

Форма HTML извлекается через AJAX и загружается в DIV с помощью:

$(ajaxData).appendTo("#my-form-holder").trigger("create");

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

Поскольку вы находитесь в Phonegap, вам может даже не понадобиться теоретическое действие, поскольку у вас, вероятно, будет jQuery для обработки ввода, но в формах состояний jQuery Mobile docs должны быть атрибуты действий и методов, поэтому я не хотел идти против что. Кроме того, jQuery Mobile обычно имеет роль data-role = "field-содержать" DIV вокруг каждой группы метки/ввода, но я обнаружил, что ошибка произошла раньше, если я это сделаю. Опять же, ошибка возникает в произвольный момент, который никогда не бывает таким, поэтому я не знаю, связано ли это напрямую с DIV.

У меня также есть вход, закодированный на другой странице:

<div data-role="fieldcontain" class="ui-hide-label">
    <label for="service-search-input">
    </label>
    <input name="service-search-input" id="service-search-input" placeholder="Enter a service to search for" type="search">
</div>

Кажется, это работает нормально. Тем не менее, нет никаких других входов для переключения, поэтому лучшее, что я могу сделать, чтобы попытаться воспроизвести ошибку, - это фокус/нефокусировка ввода, нажав в другом месте на странице. Хотя, я всегда могу напечатать изначально, тогда как ваша ошибка не позволяет вам вводить текст, если я правильно понимаю. Вы можете попробовать эту структуру HTML и посмотреть, работает ли она. Нет тега формы, окружающего этот вход.

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