のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,388人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.105 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
651 : Name_Not - 2013/04/03(水) 00:08:06.23 ID:??? (+21,+3,+0)
ゴバークw
652 : Name_Not - 2013/04/03(水) 00:56:22.50 ID:??? (+65,+29,-25)
>>648
>>1嫁 お前はここでもスレ違い
654 : 636 - 2013/04/03(水) 03:57:02.29 ID:??? (+41,-30,+0)
やっぱりSafariでは機能はあるがsubmitボタン押下時に検証しないようだ。invalidイベントが発火しない。
windows版のSafari5だからかな。iPhoneもダメだったが、macのSafari6はどう?
以下検証コード

<form><input required><input type="submit" value="送信"></form>
<script>
var fm = document.forms[0];
if ( typeof fm.checkValidity === "function" ) {
var inputRequired = fm.elements[0];
var testInvalidHandler = function(e) { alert("fired invalid event"); return false;};
inputRequired.addEventListener("invalid", testInvalidHandler);
var supported = fm.checkValidity() === false && inputRequired.validity.valid === false;
alert("HTML5 Forms validation is " + (supported ? "supported" : "not supported"));
//inputRequired.removeEventListener("invalid", testInvalidHandler);
}
else { /*IE-9*/
alert("HTML5 Forms validation is not supported");
}
</script>

Safariを含む対応ブラウザでは次の順でアラートが出る
1. "fired invalid event" ※checkValidity()の際に発火
2. "HTML5 Forms validation is supported"
655 : Name_Not - 2013/04/03(水) 09:31:00.24 ID:??? (-1,-29,-5)
関係ないけどwin版safariは廃止になるんだっけ
656 : Name_Not - 2013/04/03(水) 12:27:53.51 ID:??? (+47,+29,-1)
やわらかいなり
657 : Name_Not - 2013/04/03(水) 14:34:41.14 ID:??? (+62,+29,-34)
>>654のような通常の機能テストでは使用可能と判断されるのに
いざ本来のタイミングでおこなわれるべき動作がおこなわれない。
どうテストすりゃえーねん。えーねーんん
658 : Name_Not - 2013/04/03(水) 14:35:51.63 ID:??? (+47,+29,-1)
やわらかいなり
659 : Name_Not - 2013/04/03(水) 14:49:09.71 ID:??? (+10,-7,+0)
エーネーン
660 : Name_Not - 2013/04/03(水) 14:51:01.23 ID:PF81KaJa (-8,-30,-206)
ジオコーダーで匿名関数の戻り値(latlng)を関数の呼び出し元にリターンさせたいのですが、
やり方が分かりません。どーやって受けたら良いんでしょうか?
a=(function(results, status)())の様な形で受けようと思うとジオコーディングでエラーが出ます。

function codeAddress(address) {
geocoder.geocode({'address': address},function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {var latlng=results[0].geometry.location; return latlng.toString();}
else {alert(status);}
});
}
661 : Name_Not - 2013/04/03(水) 15:03:17.94 ID:??? (+14,-30,-126)
>>660
↓こういうこと?
function codeAddress(address) {
var latlng;
geocoder.geocode({'address': address},function(results, status) {
if (status == google.maps.GeocoderStatus.OK) { lating = results[0].geometry.location.toString(); }
else {alert(status);}
});
return latlng;
}
663 : Name_Not - 2013/04/03(水) 15:10:51.77 ID:PF81KaJa (+35,+29,-19)
>>661
早々のレスありがとうございます。
ただ、その方法ではundefinedしか返らないんです。
664 : Name_Not - 2013/04/03(水) 15:16:52.29 ID:??? (+22,-9,-23)
>>663
latingを宣言時にlatlngにしちゃってたので
それはたぶん俺の方のタイプミスのせいじゃないだろーか・・・
665 : Name_Not - 2013/04/03(水) 15:18:38.29 ID:??? (+12,-29,-8)
逆だ。latlngをコールバック内でlatingにしちゃってた
666 : Name_Not - 2013/04/03(水) 15:20:40.89 ID:PF81KaJa (+20,+29,-12)
>>665
いや、それとは関係なくundefinedなんです。
667 : Name_Not - 2013/04/03(水) 15:28:08.46 ID:??? (+26,+29,-6)
それはすまんこ。あとは成功してるのか、どんなエラーが出てるのかですな
669 : 0 - 2013/04/03(水) 15:46:43.45 ID:Tj4BBb4L (-20,+29,-8)
ごめんなさい。
半角スペースが読み込まれずにかなり読みにくくなってしまいました。
670 : Name_Not - 2013/04/03(水) 15:47:51.18 ID:PF81KaJa (+34,+7,-6)
>>667
ソース自体エラーが出る訳じゃないんですが、latlngの値の取り方が分からないんです。
671 : 0 - 2013/04/03(水) 16:03:09.16 ID:??? (-1,-22,-5)
>>668エラーメッセージ書き忘れた。
サーバー転送に失敗しました。
って出るお
672 : Name_Not - 2013/04/03(水) 16:11:20.06 ID:??? (+9,-29,-14)
>>654
Mac版Safari 6も同じような感じ。User-Agentで判断するしかないんじゃないかなあ。
673 : Name_Not - 2013/04/03(水) 17:06:25.61 ID:??? (+26,+28,-10)
>>670
そのコールバック関数って非同期で呼ばれてるってことはない?
674 : Name_Not - 2013/04/03(水) 19:03:39.61 ID:??? (-7,-29,-2)
>>668
'smtpserver': 'smtp.mail.yahoo.co.jp'
675 : Name_Not - 2013/04/03(水) 20:53:52.88 ID:??? (+4,-30,+0)
>>672
Safari6も同じか~。試してもらってありがとうです。
AppleのサイトではSafari搭載の先進的機能としてフォーム検証機能もリストしてるんだが
実際どういう動作になってるのか・・・
ともかくUA判別は最後の砦として、簡易だが次のように考えてみた(インデントは全角空白)

<form><input name="name" required><input type="email" name="email" required><input type="submit" value="submit"></form>
<script>
var fm = document.forms[0];
var canUseHTML5FormsValidation = typeof fm.checkValidity === "function";
fm.addEventListener("submit",function(e){
  console.log("fired submit event");
  if ( canUseHTML5FormsValidation ) {
    for ( var i=0,l=this.elements.length; i<l; i++ ) {
      var element = this.elements[i];
      if ( element.willValidate && !element.validity.valid ) {
        console.log("[" + element.name + "] " + element.validationMessage);
      }
    }
  } else { /* 従来どおりのJS検証 */ }
  e.preventDefault();
});
</script>

対応ブラウザで不正な入力があればsubmitハンドラ実行前に中断されるので
ハンドラが呼ばれるときには必ず検証をパスしており、エレメントのvalidity.validがtrueになっている。
Safariではsubmitボタン押下で検証しないので不正な入力はfalseのままであり
メッセージがセットされた状態になっている。
676 : Name_Not - 2013/04/03(水) 21:09:27.60 ID:??? (+10,-17,-48)
ぶっちゃけブラウザ経由しなくても送信できるんだから最終的にはサーバ側で処理しないと
677 : Name_Not - 2013/04/03(水) 21:13:35.63 ID:??? (+63,+30,-120)
JavaScript無効の環境もあるかもしれないし、
あくまで「機能向上」の観点で行うのがいいと思うよ
その場でバリデーションの結果を反映させることができ、わざわざユーザーが送信しなくても
事前に間違いが分かる、という程度だと思ったほうがいい。
結局最終的なバリデーションはサーバーでやらなくちゃいけないんだし。
そう考えると、「ユーザーの利便性」にどの程度労力をかけられるかということにもなるな。
680 : Name_Not - 2013/04/04(木) 14:04:26.41 ID:0b6Iynye (-7,+29,-27)
>>679
ジオコード系メソッドは非同期
http://sites.google.com/site/gmapsapi3/Home/services

だからじゃね?
値返すのをやめにして、コールバックを引き受ける形にしたほうが良いと思う
682 : Name_Not - 2013/04/04(木) 14:26:36.76 ID:??? (-11,-30,-95)
>>681
function codeAddress(address) { ~ }

codeAddress(add);
alert(latlng);
ではなく、

function codeAddress(addressn func) { ~ ; func(); }

codeAddress(add, function(){
 alert(latlng);
});
こう
683 : Name_Not - 2013/04/04(木) 14:31:30.76 ID:0b6Iynye (+21,+29,-42)
>>681
ajaxとかもそうだけど
非同期なことやる場合、その結果を受けて実行する関数を引数にとるでしょ
そういうのをコールバックって言ってみた
684 : Name_Not - 2013/04/04(木) 15:34:08.34 ID:??? (+3,-30,-119)
あるいは、コールバック関数を登録するオブジェクトを返すようにして、
codeAddress 呼び出し後に登録。
codeAddressのfunction(results, status)ではそのオブジェクトに登録されているコールバック関数を呼び出す。


まあ、jQuery.Deferred のことなんだけどね。
685 : 660 - 2013/04/04(木) 15:44:39.98 ID:PrAPUcne (-21,+30,-15)
>>682-684
ありがとうございます。ちょっと理解不足なんで修業してきます。
686 : Name_Not - 2013/04/04(木) 16:39:10.45 ID:??? (+21,-30,-145)
よろしくお願いします

【環境】Win7 Chrome, HTML5 form, UTF8
【何をしたのか】
ソースはチェックボックス等の選択で出力結果を得るフォーム
チェックボックスvalue に名称を格納していて & を含むもの有り
構文チェックでエラーが出たので '&' に書き換え
しかしJavaScriptの実行結果は '&' がそのまま出力

【期待する結果】'& の出力文字を & にしたい
【サンプルコード】
<input type="checkbox" name="chkItem" value="Book & Magazine">Book & Magazine
document.hoge.txtResult.value += document.hoge.chkItem[i].value;
687 : Name_Not - 2013/04/04(木) 16:58:35.12 ID:??? (+5,-29,+0)
>>686
decodeURI
Sring.replace
688 : Name_Not - 2013/04/04(木) 19:06:43.01 ID:??? (+36,-29,-18)
>>686
Google Chrome 26.0.1410.43 m で再現できない
http://jsfiddle.net/zaA6u/
689 : Name_Not - 2013/04/04(木) 21:57:33.78 ID:0b6Iynye (+26,+17,-5)
>>688
Firefox19.0.2でも再現出来ない
というか、&amp;と書いたらふつうにアンパサンドになっちゃいそうなもんだけど
http://jsfiddle.net/zaA6u/1/
690 : 689 - 2013/04/04(木) 21:58:20.64 ID:0b6Iynye (+28,+26,-19)
失敗した失敗した失敗した失敗した

>>688
Firefox19.0.2でも再現出来ない
というか、&と書いたらふつうにアンパサンドになっちゃいそうなもんだけど
http://jsfiddle.net/zaA6u/1/
691 : 686 - 2013/04/05(金) 00:05:05.44 ID:??? (+6,-30,-70)
>>687
どもです。decodeURI は効果なしだったけどreplaceで出来ました
&を含むURL生成もソース内でやっていて
不具合が出たので同様にreplace→encodeURI→window.openで対応出来

>>688-690
検証ども。自分もそちらはイケました
自分のソースでreplaceを咬ませる前の変数をdocument.writeしたら&でした
何が違うのか気になりますが…
693 : Name_Not - 2013/04/05(金) 14:39:07.15 ID:??? (+62,+29,-50)
読み込んでエラーが出ないというのは構文エラーが含まれてないというだけ。
実行したときにエラーが出たら、その実行しているコードのどこかが悪い。
コードを調べてエラーを取り除く技術がないのなら、初歩に戻って勉強する。

それで、このidcheckは何をしてるのか説明してみなよ。
694 : Name_Not - 2013/04/06(土) 01:36:05.36 ID:??? (-1,-29,-19)
vbsをjsに変換するソフトあったら教えてください
695 : Name_Not - 2013/04/06(土) 02:05:04.09 ID:??? (+42,+20,+0)
ありません
697 : Name_Not - 2013/04/06(土) 23:31:35.07 ID:??? (+37,-30,-41)
>>695

if (run == null) {
var run = setInterval(function(e) {

ここを見て何とも思わないのか?
698 : Name_Not - 2013/04/06(土) 23:52:13.44 ID:??? (+63,+29,-10)
>>>697

おおっ
的確な答えありがとうございます。
トップレベルで宣言するようにしたらちゃんと思ったように動きました。
700 : Name_Not - 2013/04/07(日) 05:16:38.98 ID:??? (-6,-29,-70)
>>699
「クリックイベントを発生させる」というのは、
ライブラリを使わない限りクロスブラウザ対応が面倒だとは言っておく

AとBどっちを表示するかの判定については、

http://localhost/index.html#planA
http://localhost/index.html#planB

などとしてlocation.hashを見てやればいい
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について