Hei Blog

Movable Typeのこと、いろいろメモっとこうと思ってブログつくりました。

MTの管理画面で入力した値を自動的に計算させるには

管理画面でフィールド同士を計算MTの管理画面で、複数のカスタムフィールドに入力した数値を足して、結果用のフィールドに結果を出力したいなーと思い、「MTAppjQuery」を利用して実装してみました。

左の画像のようなカスタムフィールドを作成し、「テストフィールド1」と「テストフィールド2」に数値を入力すると「テストフィールド3」に足した結果が表示されるようにします。

なお、わたしはjQueryが得意というわけではないので、「ここはこうした方がいいよ!」などのご意見がありましたらガンガンつっこんでくださいね。

参考記事

まず、今回参考にさせていただいたのはハムさんのブログの下記の記事です。

input要素に入力した数字を足すJSを簡単に実装してみる
(THE HAM MEDIA BLOG)

この中の「入力した時点で計算をする」の部分を参考にさせていただきました。

1.カスタムフィールドを作成する

まずはカスタムフィールドを下記の内容で作成します。

テストフィールド1  basename:entrytestfield01
テストフィールド2  basename:entrytestfield02
テストフィールド3  basename:entrytestfield03

2.user.jsを編集

次に、MTAppjQueryのuser.jsを編集します。
01に入力したときと、02に入力したときの両方の処理を書く必要があります。

※2012/8/16 追記
@tinybeansさん、@hjfujiさんから、(A)(B)の処理を1つにまとめる方法などを教えていただきましたので、近日中に追記します!
※2012/8/18 追記
続編記事を新しく作成しました!
こちら

(A)entrytestfield01に入力したときの処理

$('input#customfield_entrytestfield01').blur(function(){
  var numA = $('input#customfield_entrytestfield01').val();
  var numB = $('input#customfield_entrytestfield02').val();

  //parseIntで文字列を数値に
  numA = parseInt(numA);
  numB = parseInt(numB);

  //01の入力値が数値では無い場合の処理
  if(isNaN(numA)){
    //計算結果表示のinput内を削除
    $('input#customfield_entrytestfield03').val('');
    return false;
  };
  //02の入力値が数値では無い場合の処理
  if(isNaN(numB)){
    //計算結果表示のinput内を削除
    $('input#customfield_entrytestfield03').val('');
    return false;
  };

  $('input#customfield_entrytestfield03').val(numA + numB);
});

ハムさんのソースをもとに、まずはフィールドの指定のしかたを「input#customfield_entrytestfield01」のように変えました。(basenameを変える場合は適宜変更してください)
するとうまく動いたことは動いたのですが、キーを打つたびに計算が走るのがちょっとイヤだったので、1行目の赤字の部分を「keyup」からフォーカスが外れたときに動作する「blur」に変更しました。

もう1点、青字の部分が「!numA」という記述だったのですが、このままだと「0」を入力したときにも合計欄が空欄になってしまいましたので、「isNaN(numA)」という条件に変更してみたところ、「0」を入力しても結果が表示されるようになりました。

(B)entrytestfield02に入力したときの処理

こちらも01のときと同様に処理を書いておきます。
01と違うのは1行目の赤字の部分のみです。

$('input#customfield_entrytestfield02').blur(function(){
  var numA = $('input#customfield_entrytestfield01').val();
  var numB = $('input#customfield_entrytestfield02').val();

  //parseIntで文字列を数値に
  numA = parseInt(numA);
  numB = parseInt(numB);

  //01の入力値が数値では無い場合の処理
  if(isNaN(numA)){
    //計算結果表示のinput内を削除
    $('input#customfield_entrytestfield03').val('');
    return false;
  };
  //02の入力値が数値では無い場合の処理
  if(isNaN(numB)){
    //計算結果表示のinput内を削除
    $('input#customfield_entrytestfield03').val('');
    return false;
  };

  $('input#customfield_entrytestfield03').val(numA + numB);
});

上記の2つの処理を、下記の「〜〜〜〜」の部分に書いて、user.jsをアップすればOKです。

if(mtappVars.blog_id == XX && mtappVars.screen_id == 'edit-entry'){
    〜〜〜〜
}
※XXには表示を設定したいブログのIDを入れてください

3.その他

このサンプルでは、単純なテキストボックスに計算の処理を加えているだけですが、実際に使われる場合には入力欄のサイズやレイアウトを変えたりしてあげるとより使いやすくなると思います。これらもすべて「MTAppjQuery」を使えばできますよー。


スポンサードリンク




コメント

お名前 必須

名前を入力してください。

メールアドレス

正しいメールアドレスを入力してください。

URL

正しいURLを入力してください。

タイトル

タイトルを入力してください。

タイトルに不適切な言葉が含まれています。

コメント必須

コメントを入力してください。

コメントに不適切な言葉が含まれています

パスワード必須

パスワードを入力してください。

パスワードは半角小文字英数字で入力してください。

Cookie

RSS 2.0 Login