none
カスタムリストのアイテム登録時に入力チェックをしたい RRS feed

  • 質問

  • こんにちは

    カスタムリストのアイテム登録時に入力チェックをしたいと考えております。
    具体的には以下の内容をチェックしたいと思っておりますが、何か方法は
    ありますでしょうか?

    ■入力チェック
    ・特定の複数の列全てが空欄だった場合、アイテムが登録できない
     (もしくはエラーメッセージ表示)
     例)列A 空欄 、列B 値あり→登録可
       列A 値あり、列B 空欄 →登録可
       列A 空欄 、列B 空欄 →登録不可(エラー表示)

    ■動作環境
    Server:Windows 2003 R2、SharePoint 2007
    Client:Windows XP、VISTA
    Service Pack:WSS/MOSS SP1

    何らかのヒントになるような情報があれば
    ご教示頂けませんでしょうか。

    よろしくお願いいたします。

    2010年12月2日 5:50

回答

  • http://blog.sharepointissue.com/2009/09/blog-post.html

     

    こちらの実装方法は如何ですか?


    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク ichigo5657 2010年12月13日 2:35
    2010年12月6日 0:11
  • 「yama chan」さんから別な方法も提案されているようですが、一応 Javascript での方法です

    通常、リストの入力フォームに Javascript を埋め込むには Sharepoint Desiner を使う必要がありますが、以前の投稿でリストの入力フォームに、コンテンツエディタ Web パーツを埋め込む方法が紹介されていますので、そちらの方法を利用すると便利です
    NewForm.aspxやEditForm.aspxの列幅の変更方法について

     

    Sharepoint のサンプルそのものが少なくて、いい例を紹介しているサイトが見つからなかったので簡単に書いてみました

    以下、入力チェックのみを行うコードのサンプルです
    「てすとふぃーるど」という名前の1行テキストの入力フィールドがある場合を想定しています
    ※下記コードは脳内デバッグのみで、実行確認をしていませんので動かない場合もあります・・・

    <script type="text/javascript">
    _spBodyOnLoadFunctionNames.push("ValidationCheck");

    function ValidationCheck()
    {
        var tags = GetTag("input","text","てすとふぃーるど");
        tags.onchange = function()
        {
            if(!tags.value.match(/^\d{3}$/))
            {
                window.alert("3桁の数字を入力してください");
                tags.select();
                return false;
            };
        };
    }

    function GetTag(TagName,inputType,Title)
    {
        var tags = document.getElementsByTagName(TagName);
        for(var i=0;i<tags.length;i++)
        {
            if(tags[i].type == inputType && tags[i].title == Title)
            {
                return tags[i];
            }
        }
        return null;
    }
    </script>

    ボタンの有効化/非有効化については、「OK」ボタンは2個あるので上記コードの「GetTag」をもとに改編して、「inputType」は「button」、「Title」は「OK」のタグを検索し、ボタンの「disabled」属性を「true」にしてあげるとボタンが非有効化されます

    • 回答としてマーク ichigo5657 2010年12月13日 2:36
    2010年12月6日 2:16

すべての返信

  • 入力チェックのみであれば、Javascript を埋め込むことで簡単に行うことは可能です

    ただし、アイテム登録時にまとめて入力チェックを行いたいとなると、難度は高くなると思います

     

    考えられる案としては、ページ表示のタイミングで登録ボタンを非有効化しておき、項目入力後のフォーカスが外れたタイミングで他の項目も入力チェックを行い、すべての項目が正しく入力されていれば登録ボタンを有効化するなどでしょうか?

    この方法であれば、エラーメッセージもダイアログで表示できますし、いろいろと応用が利くかと思います
    (毎回作るのはすごく面倒ですが、テンプレート化して毎回ちょっとだけ変更して使えると思います)

    2010年12月3日 0:24
  • Nymphaeaさん

    ご回答ありがとうございました。

    >入力チェックのみであれば、Javascript を埋め込むことで簡単に行うことは可能です
    Javascriptを使用することで入力チェックができるのですね。

    アドバイスいただいたJavascriptでの入力チェック、登録ボタンの有効化・非有効化について、
    参考になるようなURLなどが御座いましたら、ご教示いただけませんでしょうか?

    以上、よろしくお願いします。
    2010年12月3日 5:07
  • http://blog.sharepointissue.com/2009/09/blog-post.html

     

    こちらの実装方法は如何ですか?


    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク ichigo5657 2010年12月13日 2:35
    2010年12月6日 0:11
  • 「yama chan」さんから別な方法も提案されているようですが、一応 Javascript での方法です

    通常、リストの入力フォームに Javascript を埋め込むには Sharepoint Desiner を使う必要がありますが、以前の投稿でリストの入力フォームに、コンテンツエディタ Web パーツを埋め込む方法が紹介されていますので、そちらの方法を利用すると便利です
    NewForm.aspxやEditForm.aspxの列幅の変更方法について

     

    Sharepoint のサンプルそのものが少なくて、いい例を紹介しているサイトが見つからなかったので簡単に書いてみました

    以下、入力チェックのみを行うコードのサンプルです
    「てすとふぃーるど」という名前の1行テキストの入力フィールドがある場合を想定しています
    ※下記コードは脳内デバッグのみで、実行確認をしていませんので動かない場合もあります・・・

    <script type="text/javascript">
    _spBodyOnLoadFunctionNames.push("ValidationCheck");

    function ValidationCheck()
    {
        var tags = GetTag("input","text","てすとふぃーるど");
        tags.onchange = function()
        {
            if(!tags.value.match(/^\d{3}$/))
            {
                window.alert("3桁の数字を入力してください");
                tags.select();
                return false;
            };
        };
    }

    function GetTag(TagName,inputType,Title)
    {
        var tags = document.getElementsByTagName(TagName);
        for(var i=0;i<tags.length;i++)
        {
            if(tags[i].type == inputType && tags[i].title == Title)
            {
                return tags[i];
            }
        }
        return null;
    }
    </script>

    ボタンの有効化/非有効化については、「OK」ボタンは2個あるので上記コードの「GetTag」をもとに改編して、「inputType」は「button」、「Title」は「OK」のタグを検索し、ボタンの「disabled」属性を「true」にしてあげるとボタンが非有効化されます

    • 回答としてマーク ichigo5657 2010年12月13日 2:36
    2010年12月6日 2:16
  • yama chanさん

    ご回答ありがとうございました。

    >こちらの実装方法は如何ですか?
    >Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/

    情報を共有いただきありがとうございます。
    参考にさせていただきます。

    以上になります。
    2010年12月13日 2:35
  • Nymphaeaさん

    ご回答ありがとうございました。

    >「NewForm.aspxやEditForm.aspxの列幅の変更方法について」
    >
    >Sharepoint のサンプルそのものが少なくて、いい例を紹介しているサイトが見つからなかったので簡単に書いてみました

    情報を共有いただきありがとうございます。
    サンプルコードまで書いていただき感謝しております。
    参考にさせていただきます。

    以上になります。
    2010年12月13日 2:37