2016年12月5日月曜日

jQuery:EnterキーでSubmitしない(意図しない送信の防止、Enterキーをすべて禁止しない)

なんかわけわからんタイトルになりましたが、要はEnterキーを押したとき、意図しないタイミングで送信されるのを防ぎたかったのです。
この<意図しないタイミング>というのがミソで、思い通りにしようと思ったら案外考えることがあったので記録しておきます。

【目的】
・テキストボックスや、カーソルが画面外にあるときEnterキーを押したときなど  操作者が意図していないところでSubmitされるのを防ぐ

【条件】
・Enterキーをすべて無効にはしない
 - テキストエリアでEnterキーが無効になってしまう
 - 本当にEnterキーで送信したいとき(ボタンにフォーカスを明示的に当ててsubmitしたい場合)困る
・typeをsubmitからbuttonに変更しての対応はしない
 - 随所にある「input type="submit"」を「input type="button" onclick="submit();"」に書き換えたくない

【前提と方針】
・入力フォームがフォーカスされていないときでもEnterキーが押されると画面はsubmitする
・この場合、画面で一番最初に出現するsubmitボタンが発動
・しかしながら、フォーカスされているフォームを取得してみると、typeもtagも「undefined」となる

そこで、
・エンターキーは特定の種類のフォームにフォーカスされたときに押された場合を除いてすべて無効にする
・特定の種類とは、button, submit, テキストエリアとする
という方向で実装することにしました。

→エンターキーを押されたときフォーカスされているフォームのtypeとフォームのtag(タグ種別)を取得して
 ・typeがbuttonまたはsubmitであればなにもしないでその動作に任せる
 ・tagがtextareaであればなにもしないで動作に任せる
 ・type・tagがそれ以外であれば、return falseしてそれ以上動作しないようにする

javascriptでもjqueryでもいいですがここはjqueryで...
【実装】

// キー押下のイベント
$("body").keydown( function ( e ){
    // Enterキーを押下されたとき
    if((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)){
        // フォーカスされてるフォームのIDとtypeを取得
        var id = $(':focus').attr("id");
        var type = $(':focus').attr("type");

        // textareaを除外するためにフォーカスされているtagの種類を取得
        var tag = $("#"+id).prop("tagName");
        var tag = (tag !== undefined) ? tag.toLowerCase() : "";

        // typeがbutton・submit、またはtagがtextarea以外はEnterを無効
        if((type !== 'button' && type !== 'submit' && tag !== "textarea")) {
            alert("Enterキーが押されました。\nこの項目でEnterは無効となっています"); //debugのためにアラート出してただけ
            return false;
        }
    }
});

2016年7月1日金曜日

phpMyAdminでCSVインポート時、空をNULLでinsertする

phpMyAdminでCSVインポートを良く使うのですが、たとえばintのフィールドに空("")をいれようとすると


MySQL のメッセージ: ドキュメント
 #1366 - Incorrect integer value: '' for column 'sample_number' at row 1


なんてエラーが出てインポートできません。
NULLといれておけばNULLで入るので解決するのですが
普通CSVといえばExcelなどでデータを作ってCSVファイルにしてインポートするわけで
空なんてざらにあるわけでして・・・
いちいちセルにNULLとかいれるのは本当に面倒です。


と思っていたら、空だったら自動でNULLをinsertする方法がありました。


CSVインポートの際に、「フォーマット特有のオプション:」にて
「INSERT エラーで中断しない」
にチェックをつけると、空値が入っていてもNULLでインポートしてくれます。


ただCSVファイルの行数はインポート前に把握しておいた方が良いですね。

※7/3追記
このオプションは例えば入れるべき値が1列ずれてたなどそういう致命的なミスがあった場合でも適宜0やNULLなどインポートできる値に置き換えていれてしまうので、ミスに気づきにくいです。
結局使わなかった・・・

2016年1月26日火曜日

Windows 7をISOでWindows 10にアップグレード

Windows7のノートPCをWindows10にISOイメージでアップグレードしました。
(ノートPCは普段特定のネットワークにしか接続しないため)
そんなわけなので、ISOイメージを作成したPCと、実際にWindows10にアップグレードするPCは別です。
Windows10自体のアップグレードは時間がかかっただけであっさり終わったので、ISOイメージを作ったときのことを中心に残しておきます。

1.Windows10のISOディスクイメージを作成
 以下のサイトの「ツールを今すぐダウンロード」をクリックしてメディア作成用のツール(MediaCreationTool.exe)をダウンロード
 https://www.microsoft.com/ja-jp/software-download/windows10

2.MediaCreationTool.exeを実行
・ライセンス条項
・「他のPC用にインストールメディアを作る」を選択し、「このPCにおすすめのオプションを使う」のチェックを外してから、インストール先のPCの設定に合わせて項目を選択
 言語:日本語
 エディション:Windows10
 アーキテクチャ:32ビット(x86)/64ビット(x64)/両方
 ここで「両方」を選択すると、できあがる.isoのファイルサイズが5.5Gになってしまい、
 普通のDVD(4.7G)では容量が足りなくISOイメージを書き込むことができないため
 4.7GのDVDで作ろうと思っている方は32ビットか64ビットかを選択した方が良いでしょう。
・使用するメディアでISOファイルを選択し「次へ」
 →isoファイルが作成され、ダウンロードされます。これをDVDに焼きます。

3.出来上がったISOイメージからWindows7をアップグレード
 作成したディスクをいれて実行するだけです。簡単。
 Windows10互換のないソフトウェアはアンインストールを促されますのでアンインストールして実行。

4.待つ
 かなり待ちます。13:30からはじめてなんやかやで16:00でした。
 あとインストール後にデフォルト設定画面がありますが、「簡単設定」はしないで「設定のカスタマイズ」をクリックしてすべて手動でオンオフ設定します。
 特に通信関係はオフにしておいた方がよいです。というよりだいたいオフにしておいた方が間違いないです。
 規定のアプリの選択はお好きにしてください。私は全部オフにしました。

5.画面がぼやける、にじむ対策
 以下のサイトを参考に、テキストサイズを100%にして終了。
 Windows10で画面がぼやける、にじむ際の対処法 | LSnewsbox
 http://lsnewsbox.com/windows10-display-blur