開発メモ,主に補足by子連れ親父プログラマー

ラベル jQuery の投稿を表示しています。 すべての投稿を表示
ラベル jQuery の投稿を表示しています。 すべての投稿を表示

2012-07-08

一つ目を選択したら二つ目のセレクトの値が変化するようにしたいんだが、ソースの文字コードがEUCでjqueryのload()を使って読み込むと文字化けしてしまう。


一つ目を選択したら二つ目のセレクトの値が変化するようにしたいんだが、ソースの文字コードがEUCでjqueryのload()を使って読み込むと文字化けしてしまう。



文字コードがEUCなのは昔のソースなのでしょうがない。
いまさら直しようがない。
jquery の load() だと化けるってのもしょうがないだろう。調べるだけ無駄だ。
ということで、php側で一旦データを全部読み込んで、それをJSON形式のデータにして、直接javascriptのスクリプト部分に埋め込むことにしよう。

データのイメージ:
一つ目のセレクトがこんな感じであって、選択すると、

<select name="category_id">
    <option value="0">爬虫類</option>
    <option value="1">鳥類</option>
    <option value="2">昆虫option>
</select>
こんなようなデータが読み込まれて二つ目のセレクトが生成される。(鳥類だったら"1"のデータがセレクトになる)

var per_array ='{
    "0":{
        "1":"トカゲ",
        "2":"ワニ",
        "3":"ザリガニ",
    },
    "1":{
        "4":"スズメ",
        "5":"ハト",
        "6":"トンボ"
    },
    "2":{
        "7":"コオロギ",
        "8":"バッタ"
    }
}';

データベースにはこんな感じで入っている。

SELECT * FROM ikimono;
 id | category_id |   name   
----+-------------+----------
  1 |           0 | トカゲ
  2 |           0 | ワニ
  3 |           0 | ザリガニ
  4 |           1 | スズメ
  5 |           1 | ハト
  6 |           1 | トンボ
  7 |           2 | コオロギ
  8 |           2 | バッタ
(8 rows)

まず、データベースから値を読み込んで、JSON形式のデータを作成する。

$query = "SELECT id, name, category_id FROM ikimono";
$result = pg_query($pg, $query);
$n = pg_numrows($result);
if ($n){
    for ($i=0;$i<$n;$i++){
        $id = pg_result($result, $i, 0);
        $name = pg_result($result, $i, 1);
        $category_id = pg_result($result, $i, 2);
        // ここで一個一個配列に入れておいて
        $select_array[$category_id] .= '"'.$id.'":"'.$name.'",';
    }
}
// ここでカテゴリー別に {} で囲む
foreach($select_array as $k => $v) {
    $v = preg_replace('/,$/', '', $v);
    $ikimono_data .= '"' . $k . '":{' . $v . '},';
}
$ikimono_data = preg_replace('/,$/', '', $ikimono_data);// 最後のカンマを削除

で、ページ表示部分のjavascript部分をこんな感じで。
配列の定義のところに直接phpでデータを埋め込む。


<script>
$(document).ready(function(){
    $('select[name=category_id]').change(function(){
        var category_id = $(this).val();
        var ikimono_array ='{<?php echo $ikimono_data; ?>}';
        var obj = jQuery.parseJSON(ikimono_array)[category_id];
        var ikimono_select = '';
        for (key in obj) {
            ikimono_select += '<option value="'+key+'">' + obj[key] + "</option>";
        }
        $('select[name=ikimono_id]').empty().append(ikimono_select);
    }).change();
});
</script>

二個目のセレクトは空っぽで用意しておく。

<select name="ikimono_id">
</select>

もっと他にいい方法がありそうな予感が大いににするが、とりあえずこんなところで。

2011-08-05

外部のサイトに置いたphpからのjsonデータをjqueryで読み込む

簡単にできると思って実装してしまって、実際に外部のサーバーに設置してから、ありゃ動かないわ、
あ〜そうだった、Javascript って外部のサーバーのファイル読めないんだっけ、と気づいていつもあきらめていたんだが。
これを ajax の crossdomain と言うらしい。
検索すると jquery のプラグインとかで沢山ヒットするが、jquery のドキュメントを見ると1.5以降 jquery 単体でも実現できるようになっている。
ということで試してみた。
まず javascript 側は、
$.ajax({
    url: "http://xxxxxxxxxxxxxx/get_json.php",
    data: "name=123",
    dataType: 'JSONP',
    async: false,
    crossDomain: true,
    success: function(data){
        console.log(data);
    }
こんな感じ。dataType を JSONP にするのがミソだ。データは必ず get で送られるので
type: "POST"
とか書いても意味はない。
で、php 側は
echo $_GET['callback'].'({"error":"no data"})';
こんな感じ。
普通の json 形式データを()で囲んで、その前に
$_GET['callback']
をくっつける。

2010-11-12

くるくる回るGIFアニメを用意して、submitボタンをクリックした時にくるくる回したい

はぁ~丸二日くらい悩んだかも。
不毛だな。
ま、とにかく html をこんな感じにしておく。
<input id="next_button" type="submit" value="つぎへ" />
<span id="loading" style="display:none;"><img src="img/loader.gif" /> 処理中</span>

submitボタンの後ろにGIFアニメ画像を置いておいて、隠しておいて、クリックされたら出してやろう、というねらいだ。

で、最初俺はこう書いていた
$('input#next_button').click(function(e) {
  e.preventDefault();
  $('#next_button').hide(); 
  $('#loading').show();
  $('form').submit();
});
クリックで、
サブミットボタンのデフォルトの動作を禁止して、
サブミットボタンを消し、
ローディング画像を出し、
そしてフォームをサブミット!

これはまあ、動くんだが、IEで見ると何故かGIFアニメのアニメーションが動かない。静止してるのだ。
ということで順番を入れ替えてみた。

$('input#next_button').click(function(e) {
  e.preventDefault();
  $('form').submit();
  $('#next_button').hide(); 
  $('#loading').show();
});
先にサブミット。
これだと動く。
謎。
とにかく、submit() が先だ、先!

2010-10-26

jQuery UIのDialogで、開くウインドウの中身を別ファイルにしたい

ついでなので。
こちらもサンプルソースを見ると、
HTMLはただdialogってidでdiv作っておいて、
<div id="dialog" title="Basic dialog">
  <p>ここに中身</p>
</div>
JavaScript側はこんだけ。
$(function() {
  $( "#dialog" ).dialog();
});
そっけないなあ。
ドキュメントのoptionsとか見ても皆目見当が付かない。
ただやはりこれも同じHTMLのソース(テンプレ)の中にダイアログ用のソースをどんどん書いていくと、ごちゃごちゃになってくる。
1個、2個くらいならいいとは思うが。
ということで調べてみると、

Loading a page into a dialog

こういう記事があり、やり方はあることが分かった。

jqueryでまず一発 div を生成し、そこに .load() で別ファイルを読み込んで、そいつに dialog のオプションを設定し、そして .open() すれ、ってことらしい。

例として、id="add" のなにがしをクリックした場合として、
$('#add').click(function() {
  $('<div></div>')
    .load('add.php')
    .dialog({
      modal: true,
      autoOpen: false,
      buttons: {
        "登録": function() {
          $(this).dialog("close");
        }
      }
    })
    .dialog('open');
  return false;
});
こんな感じでしょうかー。

jQuery UIのTabsを使って切り替えるタブの中身のコンテンツ部分を別ファイルにしたい

他にいいのがなくて仕方なく使ってるjQuery UIですが、一番よく使う、いや、使いたくなるのが、Tabsを使ったタブレイアウトですね。
デザイナーがぱぱぱっと作ってくれればいいんだけど、いないし。
ということでそのTabsですが、サンプルのソースを見ると、
こんな感じになっていて、
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">メニュー1</a></li>
    <li><a href="#tabs-2">メニュー2</a></li>
    <li><a href="#tabs-3">メニュー3</a></li>
  </ul>
  <div id="tabs-1">
    <p>一個目</p>
  </div>
  <div id="tabs-2">
    <p>2個目</p>
  </div>
  <div id="tabs-3">
    <p>3個目</p>
  </div>
</div>
切り替えるコンテンツの中身も全部同じ一個のファイル(テンプレ)に書く、それを出したり、隠したりする、ということになっている。
中身がちょびっとだったらいいけれども、量が多いとソース書く時に長くなるし、見づらくなるし、分割したい訳です!
別ファイルに。

ということで考えてみたんだが、、
HTMLの方は、
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">メニュー1</a></li>
    <li><a href="#tabs-2">メニュー2</a></li>
    <li><a href="#tabs-3">メニュー3</a></li>
  </ul>
  <div id="tabs-1">
  </div>
  <div id="tabs-2">
  </div>
  <div id="tabs-3">
  </div>
</div>
コンテンツ部分を空っぽにしておいて、
$("#tabs").tabs({
  select: function(event, ui) {
    if (ui.index == 0) {
      $(ui.panel).load('index.php');
    }
    else if (ui.index == 1) {
      $(ui.panel).load('menu.php');
    }
    else if (ui.index == 2) {
      $(ui.panel).load('user.php');
    }
  }
});
とするのはどうだろうか。
もちろん、.load() で呼び出すindex.phpとかには<div>の間に入る内容を出力させます。
もっといい方法ありますか?

2010-10-01

テーブルの一番右端の列の値だけを取り出したい

テーブルの一番右端の列の値だけを取り出したい テーブルの一番右端の列に文字が入っていて、中にはリンクが貼られている場合もあるとする。
リンクが貼られている場合はそのURLを、文字だけの場合は、文字を、取り出したい。
var val=''; 
$('tr td:last-child').each(function(n){ 
    if ($(this).find('a').attr('href') != '') { 
        val += $(this).find('a').attr('href')+"\n";
    } else {
        val += $(this).text()+"\n";
    }
});
$('body').append('
' + val + '
');

こんな感じにしてみた。

2010-09-15

jQuery で table をいじるときは tbody を忘れない

まぁ普通に会員の一覧検索みたいな管理画面を作っていて、普通に table でタグが組んであって、それを項目名をクリックしたらその項目名の昇順で並び替えたいとか、そんなような作業ってのは結構あるわけで。
なんかこう、テーブルのそのデータ行の部分だけを Ajax で load するようにしたいなと。
思ったわけです。

で、テーブルは普通に、こんな感じであって、
<table id="result">
  <tr>
    <th>ID</th>
    <th>氏名</th>
    <th>メールアドレス</th>
  </tr>
  <tr>
    <td>1</td>
    <td>山田</td>
    <td>yamada@・・・.jp</td>
  </tr>
  <tr>
    <td>2</td>
    <td>佐藤</td>
    <td>sato@・・・.jp</td>
  </tr>
</table>
このデータ行の部分だけを Ajax で書き換えたいってことなんですが、どうすればいいですかね?
テーブルの2行目以降を一旦 remove() とかで消して、そこに append() すりゃいいんじゃないかとか、いろいろ悩んでみたんだけど、結局、tbodyを使うってことで解決しました。
先のテーブルを以下のように書き直します。
<table id="result">
  <thead>
    <tr>
      <th>ID</th>
      <th>氏名</th>
      <th>メールアドレス</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>山田</td>
      <td>yamada@・・・.jp</td>
    </tr>
    <tr>
      <td>2</td>
      <td>佐藤</td>
      <td>sato@・・・.jp</td>
    </tr>
  </tbody>
</table>
そして、
$(document).ready(function() {
  $('#result tbody').load(
    './result.php',
    $('form').serialize(),
    function(data){}
  );
});
と jQuery で書きます。
result.php にはページ中のフォームの値がGETで渡っていくので、それを適当に処理してクエリーをかけて結果を元に
    <tr>
      <td>1</td>
      <td>山田</td>
      <td>yamada@・・・.jp</td>
    </tr>
    <tr>
      <td>2</td>
      <td>佐藤</td>
      <td>sato@・・・.jp</td>
    </tr>
の部分だけを出力してやればよいです。

2010-09-11

jQuery、Form Plugin を使って、file upload する、ファイルを選択したら自動でその画像が表示されるようにする

まあ、とにかくファイルアップロード系のプラグインってのはあるようでないようで、これというのがない。
もう探し疲れたよ、ほんとに。
ファイルのアップロードのインターフェースはこういうのがいいんだ、っていう部分で人によって意見が違いすぎるんだよな、結局。
だから作者によって考えてることが全然別々で。
ということで、一番シンプルで、機能がなくて、ただアップロードできるだけ、というものを考えてみた。
まず、HTML側はこうする。
<form id="upload" method="post" action="form.php" >
  <input type="file" name="sample" id="sample" />
  <img id="sample_img" src="img/sample.jpg">
</form>
sample.jpg はデフォルトの画像で用意してあって、最初から表示されているんだけど、ファイル参照で別の画像を選べばそれに置き換わる、というようなものを作ろうってことだ。

まず、
http://www.malsup.com/jquery/form/
こちらから Form Plugin を入手して、読み込む。
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
で、ファイル選択したらファイルアップロードをする php に処理を渡せばいいので、
$(document).ready(function() {
  $("input#sample").change(function(){
    var options = { 
      url:       'upload.php',
      dataType:  'xml', 
      success:   processXml 
    }; 
    $('form#upload').ajaxSubmit(options); 
  });
});
こんな感じに書く。中味は全部 form プラグインの記述。dataType で xml を選ぶのが味噌だ。
json にすると動かないので注意。
ajaxSubmit で form の action 先を upload.php に変更して、自動でサブミットしてくれる。

ということなので upload.php を書く。
いや、これはまあ、普通に $_FILES を使ったファイルアップロード処理を php で書けばいいだけなので詳細は略。
普段自分が使ってるやつでやってくれ。
なんやかんや処理した後に、
header('Content-type: text/xml'); 
echo <<<END
<root>
  <status>$status</status>
  <file_path>$file_path</file_path>
  <emes>$emes</emes>
</root>
END;
というように xml で結果を返す。上記では $status に成功したかどうか、$file_path にアップロードした画像を保存したファイルのパス、$emes にエラーメッセージ、を格納しているつもりである。

で、アップロードに成功すると
success:   processXml 
とあるように、processXml に処理が渡るので、processXml をごりごり書く。
function processXml(responseXML) {
  var status = $('status', responseXML).text();
  if (status == 'success') {
    var file_path = $('file_path', responseXML).text(); 
    $('#sample_img').attr('src', file_path);
  } else {
    var emes = $('emes', responseXML).text();
    alert(emes);
  }
}
xml のデータは
$('status', responseXML).text()
というような書き方で取得できる。
ので、jQuery の .attr を使って画像のパスを書き換える。
$('#sample_img').attr('src', file_path);
これでオッケーだ。
あとは好きなようにいじればよしと。

2010-08-31

jQueryでFCKEditorのvalueを取り出す

$.ajaxとかでpostしてたらFCKEditor部分の値が渡ってなかったので仕方なく。

$('iframe').contents().find('td#xEditingArea iframe').contents().find('body').html();

めちゃめちゃじゃないですか!

2010-08-12

window.openとかlocationとかsubmitとか、普通の昔から使ってたJavascriptをjQueryで書く

まあ、昔はみんな button に onclick つけたり、画像にjavascriptのリンク貼ったり、
して「戻る」ボタンにてた訳で。
大体もうデザイナーさんから上がってきた時点で、
<a href="javascript:history.back()"><img src="images/B.gif" width="170" height="36" alt="戻る" /></a>
こんなんになってたんだけども。
jQuery とか使い始めるとこういうソースがどうにも耐えられない。
html ソースの中に Javascript のコードが書いてあるのが許せない状態になってしまう。
ということで、これまではよく見かけたコードを書き換えるにはどうしたらいいか調べてみた。

まずはボタンクリックで特定のURLにリダイレクトさせるやつ。

こんなボタンがあるとして、
<input type="button" name="back" value="back" />
こんな感じっすか。
$(':button[name=back]').click(function() {
    window.location = 'index.php';
});
次、ボタンクリックで window.open サイズ指定も付けて。
$(':button[name=back]').click(function(e) {
    window.open('index.html','_blank',
        'width=360, height=500, menubar=no, toolbar=no, scrollbars=no');
    e.preventDefault();
    return false;
});
最後、ただ単にサブミットする。ついでに hidden の値を Javascript で指定。
こんなフォームがあるとして、
<form action="index.php" method="post">
<input type="hidden" name="key" value="" />
<input type="submit" />
</form>
こんな感じで。
$(':submit').click(function() {
    $(':hidden[name=key]').val('123');
    $('form').submit();
});
あと、追記だけども、HTML側で指定したフォームの飛び先(action)とは全然別のアドレスに飛ばしたい時もあるよね。
こんなんなってて、
<form action="index.php" method="post">
<input type="button" id="preview" value="preview" />
<input type="submit" />
</form>
プレビューボタンを押したら、preview.phpに飛ばしたい、っていう場合、
ついでにpostじゃなくてgetにしたい、っていう場合、
こうなる。
$(':button#preview').click(function() {
    $('form').attr('action', 'preview.php');
    $('form').attr('method', 'get');
    $('form').submit();
});

2010-05-06

jQueryで作るタブのメニュー画面がリンクから飛んできた時も選択した状態にしたい

今開発してるシステムでちょっとおもしろそうな題材があったので紹介しておきます。
ソース全部載せると分かりづらいので一部だけで概念的に説明しますが、これはまあ、普通にレフトメニューがあって、そしてメインの部分にはタブでメニューを選択できるようなレイアウトの画面だと思って下さい。
レフトメニューはこんな感じ
<div class="left">
    <p>メニュー</p>
    <ul>
        <li><a href="sample.html#menu1">menu1</a></li>
        <li><a href="sample.html#menu2">menu2</a></li>
        <li><a href="sample.html#menu3">menu3</a></li>
        <li><a href="sample.html#menu4">menu4</a></li>
        <li><a href="sample.html#menu5">menu5</a></li>
    </ul>
</div>
メイン部分のタブはこんな感じ
<div class="menu-tab">
    <ul>
        <li><a href="#menu1" class="selected">menu1</a></li>
        <li><a href="#menu2">menu2</a></li>
        <li><a href="#menu3">menu3</a></li>
        <li><a href="#menu4">menu4</a></li>
        <li><a href="#menu5">menu5</a></li>
    </ul>
</div>
そして、このメイン部分のタブ表示の下に、以下のような、各タブをクリックした時に表示すべき内容を menu1 から menu5 まで全部並べておきます。
<div class="menu">
    <div id="menu1" class="list">
        menu1の内容
    </div>
    <div id="menu2" class="list">
        menu2の内容
    </div>
    <div id="menu3" class="list">
        menu3の内容
    </div>
    <div id="menu4" class="list">
        menu4の内容
    </div>
    <div id="menu5" class="list">
        menu5の内容
    </div>
</div>
これを jQuery を使って、menu2 のタブをクリックした時は <div id="menu2"> の内容だけを表示させ、かつ、
<a href="#menu2"> のタブには選択した状態のクラス(selected)をあてたい、しかもレフトメニューからのクリックでも同じ動きができて、レフトメニューはサイト内の他のページにもそのまま(同じまま)設置されるので、他のページから、
<a href="sample.html#menu2"> というリンクで飛んできた時にも menu2 の内容を表示したい、ということなんですね。

んで、最初に送られてきたソースがこんな感じでした。
$("div.list:not("+$(".menu-tab li a.selected").attr("href")+")").hide();
$(".menu-tab li a").click(function(){
    $(".menu-tab li a").removeClass("selected");
    $(this).addClass("selected");
    $("div.list").hide();
    $($(this).attr("href")).show();
    return false;
});
1行目で、クラスが selected になっている(=つまり選択状態)のタブの href 属性を取得して(この場合は #menu1 )、それ以外の $("div.list")、すなわち各メニューの内容を隠しています。
2行目でタブのクリックを取得して、クリックされたタブについてあれこれ処理しています。
3行目は全てのタブから selected クラスの除去。
4行目は選択されたタブに selected クラスを付加。
5行目は各メニューの内容を一旦全部隠して。
6行目でクリックされたタブの href 属性と同じ id のメニューの内容を表示。

このままでは確かにレフトメニューからクリックされた時も、このページに他のページからリンクで飛んできた時も動きません。
ということで、どうやって、<a href="sample.html#menu2"> の#以下の部分を取得するか、なんですが、とりあえず
location.hash
で取得できる、ということです。
あと、jQueryの .attr() の場合は単に、
.attr("hash")
でいけると。
今回の場合基本的に #menu2 という文字列がキーになっていて、あとはタブ部分のオブジェクトをなにがしか操作すればよさそうなので、メインの部分はこんな感じで。
$(function(){
    var selected_tab = location.hash;
    var link_tab = $(".menu-tab li a");

    tabchange(selected_tab, link_tab);

    $(".menu-tab li a, .left li a").click(function(){
        tabchange($(this).attr("hash"), link_tab);
    });
});
tabchange という function を別途用意することにして、それに #menu2 という文字列と、タブ部分のオブジェクトを渡してなんとかすることにします。
7行目は、タブをクリックしたか、あるいはレフトメニューをクリックしたか、で動かして、クリックしたリンクの .attr("hash") を渡す処理にしています。
ということで、function tabchange はこんな感じで。
function tabchange(selected_tab, link_tab){
    link_tab.removeClass("selected");
    link_tab.each(function(n){
        if ($(this).attr("hash") == selected_tab){$(this).addClass("selected");}
    });
    $(selected_tab).siblings().hide();
    $(selected_tab).show();
}
each とか、siblings とか使っちゃってますが、やってる内容は元々のやつと同じです。
一応完成っす。

2010-04-03

jQueryのWYSIWYGエディターでkeyupとかkeypressのイベントを取り出す

今週ずーっとやってた不毛なjQueryアプリですが、一番はまってたWYSIWYGエディター部分についてまとめておきます。
WYSIWYGエディターというと世間ではFCKeditorが有名ですが、まあ、あれはちょっと重いんじゃない?
ってことで、jQueryのプラグインで探す訳ですが、どーもね、これっていうのがない訳で。

最初に使ってみたのがこれ
LIGHTWEIGHT RICH TEXT EDITOR (RTE / WYSIWYG) PLUGIN FOR JQUERY

使い方はこんな感じ
<textarea name="info1" cols="100" rows="10"  class="rte1"></textarea>

<script type="text/javascript">
$(document).ready(function() {
 $('.rte1').rte({
  css: ['default.css'],
  controls_rte: rte_toolbar,
  controls_html: html_toolbar
 });
});
</script>
jquery.rte.tb.js にツールバーの設定がまとめられてるのでそれを編集する。
firebugで見てるとキーを入力する度に
!keyup イベントでは charCode プロパティの値には意味がないため使用すべきではありません。
の警告が出るのがいまいちです。

次がこれ
JHTMLAREA - WYSIWYG HTML EDITOR FOR JQUERY

使い方はこんな感じ
<script type="text/javascript">
$(function() {
 $("#info").htmlarea({
  toolbar: [
   ["bold", "italic", "underline", "|", "forecolor"],
   ["p", "h1", "h2", "h3", "h4", "h5", "h6"],
   ["link", "unlink", "|", "image"],
   [{
    css: "custom_disk_button",
    text: "Save",
    action: function(btn) {
     alert('SAVE!\n\n' + this.toHtmlString());
    }
   }]
  ],
  loaded: function() {
   //
  }
 });
});
</script>


<textarea id="info" cols="50" rows="15"></textarea>
loaded とかでエディターが起動した後になにか処理を入れられる。
ドキュメントがあまり詳しくなくていまいちですかねー。
Microsoft Public License というあまり聞いたことのない?ライセンスです。

最後にこれ
HTMLBOX

使い方はこんな感じ
<textarea id='hb'></textarea>

<script language="Javascript" type="text/javascript">
var hb = $("#hb").htmlbox({
    buttons:[
      ["separator_dots","bold","italic","underline"]
 ],
 icons:"default",
 skin:"green"
});
</script>
一応PDFのドキュメントがあるんですが、どうも説明が足りなくて使い方が分からない。
UndoRedoManager plugin とか。
おもしろそうなんだけど、さっぱりわからんのだー。

ま。最後のが一番よさそうですけどね。

で、今回の課題はこのエディターで文字を入力してる最中にそのイベントを取りたいってことなんだけども、
そもそもこういうエディターというのはフォームの textarea に設定するけれども、textarea そのものは非表示にして、その近くに iframe をつっこんで
<div>
 <iframe style="height: 305px; width: 415px;">
  <html>
   <head>
   </head>
   <body>
   </body>
  </html>
 </iframe>
</div>
みたいにして。

でhtmlを表示させて機能しているようで、DOMがどうなってるんだかさっぱり分からない。
どういうからくりになってるんだか・・・。

で、結論から言うと、
編集中の文字とかを取り出すには
$('iframe').contents().find('body').html()
keyupのイベントを取り出すには、
$('iframe').contents().keyup(function(){
 // なにか処理
}
でいけます。
試しに文字を入力する度にその中の文字数を表示するというのをやってみると、
<script language="Javascript" src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script language="Javascript" src="htmlbox.min.js" type="text/javascript"></script>
<script language="Javascript" src="formState.js" type="text/javascript"></script>

<textarea id='hb'></textarea>
<script language="Javascript" type="text/javascript">
var hb = $("#hb").htmlbox({
 buttons:[
  ["separator_dots","bold","italic","underline"]
 ],
 icons:"default",
 skin:"green"
});

$(function() {
 $('iframe').contents().keyup(function(){
  $('#count').val($('iframe').contents().find('body').text().length);
 });
});
</script>
<input type="text" id="count" />
こんな感じになります。

2010-03-13

jQuery1.2の時のバグ

AJAXで生成したSELECTのoptionでselectedにした値をセレクトしてくれない
form, fieldset {
    display: inline;
    border: none;
    margin: 0px;
    padding: 0px;
}

if (isset($emes)) {
    $smarty->assign('emes', $emes);
    $smarty->display('form/form.tpl');
    exit;
}
  • test

このブログを検索

Powered by Blogger.

ラベル

php (17) jQuery (13) OSX (10) MySQL (8) Javascript (7) Postgres (7) port (7) apache (6) Java (3) Smarty (2) html (2) pear (2) FCKEditor (1) XAMPP (1) css (1) git (1) perl (1) ruby (1)

Facebookバナー