質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

4232閲覧

【swift】WKWebView上で次の入力フォームに移動したい

midomurasaki

総合スコア46

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/07/06 00:46

編集2017/07/06 12:00

webアプリをiOSで開発しています。
・Xcode8.3.3
・Swift3.0

スクリーンショットの通り、web部分はWKWebViewを使い、下部にボタンが配置されています。
イメージ説明

テキスト入力フォームが複数あるページでの動作を想定しています。
一つのテキスト入力フォームにフォーカスが当たっている状態で、Buttonを押した際に次(あるいは前)の入力フォームにフォーカスを移動したいです。(WKWebView側で用意してくれているキーボード上部の「∧」「∨」を自前で実装したい)

evaluateJavaScriptを使いJavaScriptで制御しようとしていますが、やり方がわかりません。

swift

1webView.evaluateJavaScript("document.getElementById(\"text3\").focus()", completionHandler: nil)

といったように、フォームのIDが分かっているものに対しては移動することができましたが、今いる位置の次(あるいは前)のIDの取得方法がわからず困っています。

移動のためのJavaScriptコードはどのように書けばよいでしょうか?
(目的はフォーカスの移動なので、JavaScript以外の手段でも構いません)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

うまく動作するのかわかりませんが、以下のページが参考になるのでは、と思いました。
http://www.koikikukan.com/archives/2013/08/29-015555.php

投稿2017/07/06 04:35

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

midomurasaki

2017/07/06 07:13

回答ありあとうございます。 ですが、ご提示いただいたURL先の情報には現在のフォーカスに関するもののみで、フォーカスの移動に関するものは残念ながら得られず、解決には至りませんでした。
guest

0

自己解決

自己解決しました。

  1. document.getElementsByTagName("input")でテキスト入力フォームを全て取得する
  2. フォーカスの当たっているフォームがn番目か調べる
  3. n+1番目にフォーカスを当てる

といった手順でひとまず想定の動作を実現できました。

swift

1let js: String = "elements = document.getElementsByTagName(\"input\"); for (var i = 0; i < elements.length; i++) { if(document.activeElement.id == elements[i].id) { elements[i + 1].focus();break;}}" 2webView.evaluateJavaScript(js, completionHandler: nil)

投稿2017/07/06 22:50

midomurasaki

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問