プログラマメモ2 - programmer no memo2

jsr-223 - 追記中 2017/01/09
2021/03/14

jsr-223です。


javaからJVM言語をスクリプト実行したいです。
主観ですが、メジャーな言語と思えるものを調べてみました。
かなりおおざっぱです。

対象
 clojure,groovy,scala,jruby,jython,kotlin, javascript


言語 engine name(shortName) Factoryクラス JAR 特記
Clojure Clojure clojure.contrib.jsr223.ClojureScriptEngineFactory clojure-jsr223-1.2.jar  
Groovy Groovy org.codehaus.groovy.jsr223.GroovyScriptEngineFactory groovy-jsr223-2.4.7.jar  
Scala scala scala.tools.nsc.interpreter.IMain$Factory scala-compiler-2.11.8.jar -Dscala.usejavacp=true
Kotlin kotlin org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory kotlin-jsr223-local-example-1.1-M04-eap-14.jar  
JRuby jruby org.jruby.embed.jsr223.JRubyEngineFactory jruby-complete-9.1.6.0.jar -Dpython.import.site=FALSE
Jython jython org.python.jsr223.PyScriptEngineFactory jython-2.7.0.jar  
javascript javascript com.sun.script.javascript.RhinoScriptEngineFactory#java7 resources.jar java8はNashorn


jsr-223って、もともとサーバーサイドで各種スクリプト言語の実行を目指したもののようですね。

こうやってみてみるとJVM言語っていろいろありますね。かなり貪欲というか。

呼び出し方は、ScriptEngineManagerにたいして、エンジン名を指定して、ScriptEngineを取得します。取得できない場合は、nullが返ってくるようです。

ちなみに、各ScriptEngineFactoryはプログラムの起動時に行われるようです。ScriptEngineFactoryの定義は、各ライブラリ(jar)のMETA-INF/services/javax.script.ScriptEngineFactory ファイルに記述されています。
ですので、このファイルを探せばよいというのがわかります。ただし、このファイルに記述されているのに実際のクラスがない場合、不幸なことにプログラム全体が起動しません。
# 遅延ロードでできないのかしら?

参考 clojure


以下、呼び出しソース

package jsr223; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class TestMain { public static void main(String[] args) throws ScriptException { a(); } static void a() throws ScriptException { // まとめて実行するとjava.lang.OutOfMemoryErrorする.... jsr223_noengine(); jsr223_Clojure(); jsr223_Groovy(); jsr223_Scala(); jsr223_JRuby(); jsr223_Jython(); jsr223_Javascript(); jsr223_Kotlin(); } static void jsr223_noengine() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "xxxx";// 存在しないものを指定 final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); if (scriptEngine == null) { System.out.println("*** 存在しないものを指定した場合は、script engineはnullになります。"); } else { scriptEngine.eval(""); } } static void jsr223_Clojure() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "Clojure"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("(println \"clojure \")"); } static void jsr223_Groovy() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "Groovy"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("println \"groovy \""); } static void jsr223_Scala() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "scala"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("println(\"scala \")"); } static void jsr223_JRuby() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "jruby"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("printf \"jruby \n\""); } static void jsr223_Jython() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "jython"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("print 'jython'"); } static void jsr223_Javascript() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "javascript"; // java7 Rhino java8 Nashorn final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("print('javascript')"); } static void jsr223_Kotlin() throws ScriptException { final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); final String shortName = "kotlin"; final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(shortName); scriptEngine.eval("println(\"Kotlin\")"); } }


 参考

時間の差 - javascript 2014/01/18

javascriptです。
javascriptもいろいろあってむずかしいなと。
ここから以下の情報はまちがってる可能性ある....


単純に時間の差を求めたいのですが

たとえば

                var date1 = new Date(2013, 1, 1);
                var date2 = new Date(2013, 1, 2);

とあって、

var diff1 = date2.getTime() - date1.getTime();

これかなと思ってたのですが、

var diff2 = date2 - date1;

 こういうふうにも書けるみたい。
演算子がそのまま使える?

ためしたのはosxのsafari上だけど、jquery使ってたからごにょごにょしてくるのかしらと思ったけど、jqueryなしでもどうも計算してくれているっぽい。(※jqueryが何してくれてるのか理解してないので(笑))

で,"+"だと、toStringの値を計算したので、"-"演算子だけなんか時間の差をもとめてくれる感じ。

これは、どんなブラウザでもそうのかしら?
osxでのfirefoxでも同じ動きしたけど。
 
 確証ないと、単純にdateオブジェクトの引き算使うのこわいな-

で、


JavaScript 第6版
David Flanagan 村上 列
4873115736

なんか調べてみると、Date型は、やはり演算子によって、扱う型を暗黙的に変換してるよう。
-演算子はオペランドを数値に変換します。

とあった。

これはjavascriptのバージョンによって取り入れられたものなのか、初期の頃からそうなのか気になるところ。
昔(初期の版)からそうなら、マイナス演算子使うときわざわざgetTime()を書く必要なくて、面倒な書き方がでまわってたのかなと。

 結論として
時間の差をもとめる場合は、getTimeを使わなくてよい
でOK?

ngincludeです。 2014/01/18

あんぎゅらーJSです。
みなさん、よく理解して使えるなーと感心してたりします。
可能性を感じて調べてるところです。

機能としてincludeなるものがあって指定したソースを差し込めるようなのがあるのですが、うまくいかなくて悶々としてました。


 使ったコードはこんな感じ

<div ng-include="static/a.html"></div>
static/a.htmlを読み込んで差し込ませたいはわけです。
差し込まれなくてほんと悶々しました。

 javascript - AngularJS ng-include - Stack Overflow
angular - AngularJS ng-include does not include view unless passed in $scope - Stack Overflow


<div ng-include="'static/a.html'"></div>


シングルクォートで囲むのがみそというわけでした。

つらい....

あんぎゅらーJSことはじめ。 2014/01/14

Angular.jsをつかいはじめてみました。
よくわからないことばかりです。

まずは、postで値を送信する部分

$scope.hebon = function() { $http({ method : 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, url : 'http://deijitools.appspot.com/api/tohebon', data : 'text=' + $scope.itxt }).success(function(data, status, headers, config) { $scope.otxt = data; }).error(function(data, status, headers, config) { $scope.otxt = 'error'; }); }



つぎにサーブレットで、POSTで、値を取得する部分
String text = ((String[]) req.getParameterMap().get("text"))[0];

いまいちこの辺の連携がわかってないんだよねー。

ヘボン式変換 - javascript 2014/01/12

ひらがなをヘボン式ローマ字に変換します。 はじめにjavaでの実装してたので、それをjavascript版に置き換えてみました。


実装については、いろいろ参考にしつつ、基本、前回のjava版を置き換える感じやってます。

以下、実装ソース
/* ご自由に使ってください deiji.jp */ function installHebon() { this.map = []; var sss = [ ["あ","A" ], ["い","I" ], ["う","U" ], ["え","E" ], ["お","O" ], ["か","KA" ], ["き","KI" ], ["く","KU" ], ["け","KE" ], ["こ","KO" ], ["さ","SA" ], ["し","SHI" ], ["す","SU" ], ["せ","SE" ], ["そ","SO" ], ["た","TA" ], ["ち","CHI" ], ["つ","TSU" ], ["て","TE" ], ["と","TO" ], ["な","NA" ], ["に","NI" ], ["ぬ","NU" ], ["ね","NE" ], ["の","NO" ], ["は","HA" ], ["ひ","HI" ], ["ふ","FU" ], ["へ","HE" ], ["ほ","HO" ], ["ま","MA" ], ["み","MI" ], ["む","MU" ], ["め","ME" ], ["も","MO" ], ["や","YA" ], ["ゆ","YU" ], ["よ","YO" ], ["ら","RA" ], ["り","RI" ], ["る","RU" ], ["れ","RE" ], ["ろ","RO" ], ["わ","WA" ], ["ゐ","I" ], ["う","U" ], ["ゑ","E" ], ["を","O" ], ["ん","N" ], ["が","GA" ], ["ぎ","GI" ], ["ぐ","GU" ], ["げ","GE" ], ["ご","GO" ], ["ざ","ZA" ], ["じ","JI" ], ["ず","ZU" ], ["ぜ","ZE" ], ["ぞ","ZO" ], ["だ","DA" ], ["ぢ","JI" ], ["づ","ZU" ], ["で","DE" ], ["ど","DO" ], ["ば","BA" ], ["び","BI" ], ["ぶ","BU" ], ["べ","BE" ], ["ぼ","BO" ], ["ぱ","PA" ], ["ぴ","PI" ], ["ぷ","PU" ], ["ぺ","PE" ], ["ぽ","PO" ], ["きゃ","KYA" ], ["きゅ","KYU" ], ["きょ","KYO" ], ["しゃ","SHA" ], ["しゅ","SHU" ], ["しょ","SHO" ], ["ちゃ","CHA" ], ["ちゅ","CHU" ], ["ちょ","CHO" ], ["にゃ","NYA" ], ["にゅ","NYU" ], ["にょ","NYO" ], ["ひゃ","HYA" ], ["ひゅ","HYU" ], ["ひょ","HYO" ], ["みゃ","MYA" ], ["みゅ","MYU" ], ["みょ","MYO" ], ["りゃ","RYA" ], ["りゅ","RYU" ], ["りょ","RYO" ], ["ぎゃ","GYA" ], ["ぎゅ","GYU" ], ["ぎょ","GYO" ], ["じゃ","JA" ], ["じゅ","JU" ], ["じょ","JO" ], ["びゃ","BYA" ], ["びゅ","BYU" ], ["びょ","BYO" ], ["ぴゃ","PYA" ], ["ぴゅ","PYU" ], ["ぴょ","PYO" ], /* この二文字は特別あつかい */ ["ー",""],["っ","っ"]]; for(i = 0; i<sss.length ;i++) { this.map[sss[i][0]] = sss[i][1]; } function toHebon(text) { hebon = "" var pos = 0; var len = text.length; var lastConvert = null; loop: while (pos < len) { c =""; /* * mapで変換 */ convert: { c2: if (pos + 2 <= len) { c = map[text.substring(pos, pos + 2)]; if (!(typeof c === "undefined")) { pos += 2; break convert; } } c1: if (pos < len) { c = map[text.substring(pos, pos + 1)]; if (!(typeof c === "undefined")) { pos += 1; break convert; } } c_nothing: { c = text.substring(pos, pos + 1); pos += 1; } } // convert /* * その他の規則での置き換え */ convert_another_rule: { isLastConvert_Xtu ="っ" == (lastConvert); isCH = c.startsWith("CH"); isLastConvert_N ="N" == lastConvert; isBMP = c.match(/[B|M|P].*/); /* ひつと前の変換が[っ]の場合であとにCHが続く場合 */ if (isLastConvert_Xtu && isCH) { hebon += "T"; break convert_another_rule; } /* ひつと前の変換が[っ]の場合 */ if (isLastConvert_Xtu && !isCH) { hebon += c.substring(0, 1); break convert_another_rule; } /* ひとつ前の変換が「N」の場合かつ 「B」「M」「P」が続く場合 */ if (isLastConvert_N && isBMP) { hebon += "M"; break convert_another_rule; } /* ひとつ前の変換が「N」の場合かつ 「B」「M」「P」が続かない場合 */ if (isLastConvert_N && !isBMP) { hebon += "N"; break convert_another_rule; } } // convert_another_rule /* * 最後に変換したものと+変換したもので母音がつながる場合は、追加しない */ append: { /* 母音がつながる判定 */ isBoon = (lastConvert + c) .match(/.*(AA|II|UU|EE|OO|OU)$/); /* 最後の文字 */ isLastLetter = !(pos < len); /* 「っ」もしくは「ん」 */ isXtuOrN = c.match(/っ/) || c == "N"; /* 母音としてつながっておらず、かつ、 */ if (!isBoon && (!isXtuOrN || isLastLetter)) { hebon += c; } /* 母音がつながったら 最後に変換したものとして扱わない */ if (isBoon) { lastConvert =""; continue; } } // end append lastConvert = c; } // end loop return hebon; } if (typeof String.prototype.startsWith != 'function') { // see below for better implementation! String.prototype.startsWith = function (str){ return this.indexOf(str) == 0; }; } String.prototype.toHebon = function() { return toHebon(this); } } installHebon() ;

iframeにtextを読み込ませて取得したい - jquery 2013/11/10

jqueryです。iframeの読み込ませたtextファイルの中身を取得したいです。
読み込ませるのは、同一ドメインのファイルです。
 使ったブラウザはfirefoxです。
自信ないです。
どうもブラウザのほうでpreで囲んでいるようでした。
どうなんでしょう?

iframeのタグはこんな感じで読み込み。

<iframe id="t" src="TITLE.txt"></iframe>

ロードが終わったら起動させるようなイメージです。


            $( document ).ready(function() {
                $( "#t" ).load(function(){
                    var s = $( this ).contents().find( "pre" ).html();
                    console.log(s);
                });
            });

javascriptです。変数が宣言されているかのチェックです。 2013/11/09

javascriptです。変数が宣言されているかのチェックです。
なければ初期化するとかいう処理の流れにつかえます。

if ( typeof tt == "undefined") {

ちなみに,==,=== と比較する方法があるようだけど。どうちがうのだろう。
typeofはどういう型かを返してくれるもののようです。
使い方してtypeof(xxx)ということもできそうです。
※この辺は、疲れたので追求せず。。。


こういうコードってすぐ忘れるんですよね。
ちゃんと理解してないからだなー
勉強しないと。。。


他にもいろいろとチェックする方法はあるようです。

調べてたらtypeofはjavascriptの最大の設計ミスだというのもありましたが。。。

参考

あとづけevent - jquery 2013/11/08

jqueryです。生成した部品に後付けでイベントをつけたいなと。
で、

例)だめだった。

$(".addmbody").on("click", function(){

例)うまくいった。
 jQuery(document).on("click", ".addmbody", function(){

もしくは
$(document).on("click", ".addmbody", function(){

参考


jsrenderです。ネストさせたforでの親のindexのとりかた。 2013/11/04
2013/11/06

テンプレートエンジンのjsrenderです。ネストさせたforで親のindexのとりかたです。
方法がわかるまで、時間かかりました。。。


 forを定義するときに親のindexを変数に格納するということができました。

 むずかしい。。。


とりあえずサンプル

        <script id="tmplBox" type="text/x-jsrender">
            {{for qq}}
                <div class="qbox">
                    <p class="qtitle">{{:title}}</p>
                    <ul class="qbody">
                        {{for qbody ~parent_index=#index+1}}
                        <li>
                            <label><input name="rg_{{:~parent_index}}" type="radio" id="r_{{:~parent_index}}_{{:#index+1}}">{{:t}}</label>
                        </li>
                        {{/for}}
                    </ul>
                </div>
            {{/for}}
        </script>

アプリにhtml含めて、jsも読み込ませたい - ios 2013/11/04

iosアプリにhtml5、javascript,cssを含めてみたいというわけで、html,cssはうまくいったのですが、javascriptがうまくいかない。

UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む - 24/7 twenty-four seven

たしかにビルド対象になっていたので、リソースファイルに移動させてうまくいきました。


{{:#index}} jsrender -  javascriptテンプレートエンジン 2013/11/03

現在、javascriptでのクライアント側でテンプレートエンジンを調べてたりしてます。
テンプレートエンジンがあるということを知らず、なんとなく、こんなのあったらいいよなーと最近、思ってたのですが、いろいろありますね。

候補の決めては、まず、コミュニティが活発であることかなーと思いつつも、気にしはじめるときりなさそうなので、勘で決めてたりしてます。

そんなに難しことする予定ないので。

いまのところ有力候補は、ふたつ。

現時点、jsrenderでいこうかなと思ってます。
それで、配列ぐるぐるまわしてfor繰り返しできるのはいいのですが、カウントとりたいなとか思ったときどうするのか。わからずこまりました。

ドキュメントあさってわかったのは
{{:#index}}
forの中でも使えました。

ちなみに、jsrenderのサイトでは、動作を確認できるので、動きが確認できます。

くろーじゃー じゃばすくりぷと - 手習い 2013/10/02

5、6年前からの悩みは、クロージャーがよくわからないということでした。
なんとなくはわかりますよ。もちろん。でも、体に染みこまないというかなんというか。
 
 今回は、jqueryのイベントハンドラ登録使ってみました。
登録する際に関数を登録しますが、この関数に引数を渡したいなーと思ったわけです。

で、最近,ジョンレシグさんの翻訳本をぱらぱら勉強しているのですが、なんかちょっとわかった気がしたんですよね。

クロージャーを使えば、渡された引数の値を内部で保持できることがわかったので、以下、かなりわかりづらいサンプル。

モダンなjavascripitでは、htmlにインラインでイベント設定しないのがはやりっぽいので、jquery使って、ロード時にイベントハンドラを登録。その際の関数を返す関数を引数つきで実行させて、それがハンドラごとのパラメータ値になるイメージです。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>タイトル</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script> function initThisPage() { // 関数を返すようにして、返す関数がイベントに反応するようにしたい。 // 渡された引数をクロージャーからみえる var f = function(a, nf){ var len = a; var nf = nf; return function(){ // 桁数が指定された桁より大きいと反応するようにする if(this.value.length >= len){ alert('*** bingo' + nf);} }; }; // id=txtに何か入力したら反応するように設定 $('#txt').keyup(f(3, '#btn')); } </script> </head> <body onload="initThisPage()"> <input id="txt" type="text" size="4" max="6"> <br/> <button id="btn">aaaaa</button> </body> </html>



ninjya本ためになります。

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmers’ SELECTION)
ジョン・レシグ John Resig ベア・ビボー Bear Bibeault 勝亦 勇
4798128457

もーだるなwindow showModalDialogではまった ie9 2013/09/30

javascriptです。ネイティブ実装依存だと思われるshowModalDialogです。
 モーダルなwindowで、閉じるときに親windowの関数を呼びだして値の連携したいなーといろいろ試みてました際のメモ。

試した環境はie9です。

 開かれたほうのwindowでwindow.openerで、開いたほうのwindowを取得できると思ってたのにできなくて、うーんと悩んでました。 で、わかったのが第二引数で、呼び出し側のwindowを指定しないといけないことがわかったのです。

参考


 window.returnValueの意味がよくわかってなくて、親windowが参照できるなら、親にある関数呼べるだろうと思い試すと呼べたのですが、これはwidow.openで子画面を開いたときでした。

どうも、 showModalDialogで開いたときにはopenerを参照しても親画面が参照できなくて悶々としていたら、dialogArgumentsからどうやら参照できるらしいということがわかったわけです。

以下のコードは動かしてないですが、たぶんまちがってないと思います。
if(window.opener)  {
window.opener = window.dialogArguments;
}

参考

以下、
ひとりごと。
インターネットにアクセスして検索すればすぐわかることだったけど、ネットにつながらない環境で、作業は、はまると出口なし!!



jquery ちぇっくぼっくすの値を集めてカンマで連結するよ 2011/05/28



jqueryです。
checkboxの値を全部収集して、RESTな感じで送りたいなーと思ってたのでした。

こんな感じ
// チェックされたチェックボックスの値をカンマ区切りで連結
var s = $( "input:checked" ).map( function() {
return $(this).val();
}).get().join(",");

alert(s);

リンクでなくてボタンとかで対応させたい場合 - prettyPopin 2011/05/16

javascriptです。prettyPopinです。



リンクでなくてボタンとかで対応させたい場合下記のようなコードで動きました。
function a() {
var $d = $("<a href='test.html' rel='prettyPopin'></a>").prettyPopin({width: 550,followScroll:false});
$d.click();
}



参考
jQueryでポップアップ(モーダルウィンドウ)「prettyPopin.js」 - amuns:blog

ジオコード知っているのならgetLatLngを使うより、直接GLatLngをつくって使ったほうがよいかも。- google map api 2010/05/22

グーグルさんのMap APIです。
GClientGeocoderには、getLatLng(address:String, callback:function) というメソッドがあってそれを使用していました。
でaddressに、例)「35.7524424,139.8022971」とかいうデータを渡して使っていました。
で、この結果で得られる、GLatLngがのlat.lngが僕が期待している値と違う場合がありました。
冷静に考えれば、ジオコードわかってるのなら、検索かけて作る必要がないわけで....

結論ですが、ジオコードがわかってるなら、getLatLngを使わず、直接、GLatLngを作成して、GMarkerを使うべしというわけです。
反省してます。。。

var ss = address.split(",");
var point = new GLatLng(ss[0], ss[1]);
var marker = new GMarker(point);

ァ-ヶ - 2009年においても、全角カタカナ判定は面倒..Orz... 2009/01/12

全角カタカナ判定ってどうやるんだろうって思っていたりします。
ユニコードならァ-ヶで全角カタカナ判定ができるようです。


で、プログラムで出力。


public class ZenkakuKatakanaOut {

public static void main(String[] args) {
a();
}

static void a(){
char a ='ア';
char b = 'ヶ';
for(int i=a;i<=b;i++){
System.out.print((char)i);
}

}
}


結果は、それっぽくでてます。
アィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ


しかし、全角カタカナ判定面倒くさい.....

参考

[jquery]Validation,Impromptu,Formのプラグイン 2008/10/08

シナリオ
「フォームの内容を送信します。フォームの内容はバリデーションします。バリデーションしたあとに確認ダイアログをだして、OKだった場合、AJAXして、結果ダイアログをだします。」

使うのはjQueryプラグイン3種類。



Validationはsubmitすると勝手にvalidateしてくれます。
Impromptuはプロンプト、ダイアログをだすに使えます。
Formプラグインは、フォームの中身をajaxして通信してくれるみたい。


僕が注意した要点だけかいつまんで。
まずフォームのsubmitの処理を変更。

$('#f').submit(function(){ return true; });


ValidationのruleでsubmitHandlerをコールバック関数を定義。
フォームの内容がOKの場合呼ばれるようにします。

バリデーションのルールを定義。
例)
var rules = {
submitHandler: function() { prompt(); },
rules:{
fullname_kanji:{ my_check:'お名前(漢字)' }
// そのルールを記述
}
};


バリデーションのルールの渡し方は、
$("#f").validate(rules);

次にsubmitHandlerで呼ばれる関数を定義します。
この中でダイアログをだします。
やっていることは確認ダイアログだしてOKなら通信してsuccessならまたダイアログをだす。
※ここのコードはおおざっぱ。
function prompt(){
$.prompt(msg, { buttons: { Ok: true, Cancel: false }, focus: 1,
callback:function(v, m){
if(v){  // OKの場合
var options = {
url: '通信先.php',
type: 'post',
success: function() {
//処理が成功のときのダイアログ
$.prompt('送信しました。',{
buttons: { 'トップページに移動': 'トップページに移動', Bye: 'Good Bye' }
});
}
};// options end
$('#f').ajaxSubmit( options );
}// if end
}
});
}


jQueryのプラグインのコードをいろいろみて、寄せ集め的に作成したので、参考にならないけど....

[jquery]Validationに独自ばりデータの追加。 2008/10/05

独自バリデーターの追加です。


バリデーションのプラグインを追加して独自のバリデーターを追加してみます。

参考コードは、ダウンロードしたパッケージの中に、additional-methods.jsがありました。

jQuery.validator.addMethod("my_check", function(value, element, param) {
//トリムして判断
var s = jQuery(value).text().replace(/^\s+|\s+$/g, '');
return (0 == s.length);
}, jQuery.format("▼「{0}」の項目は必ず入力してください。"));


つぎに、HTMLコードには手を入れずスクリプト側からの設定します。
フォームのオブジェクトにnameが設定されていることを前提にしてます。

$("input[@name=fullname_kanji]").attr("my_check", 'お名前(漢字)');

[javascript]apply関数 2008/02/20

apply/JavaScriptリファレンス

あとでかく