のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,063,122人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ+ JavaScript の質問用スレッド vol.87 +

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    851 = :

    >>845
    JavaScriptゆかりならこっちだろう
    http://d.hatena.ne.jp/replication/20110615/1308063792
    http://efcl.info/2010/0304/res1584/

    852 = :

    phpと組み合わせて

    onclieck="func(a,b~n)"
    と中の引数が1~複数に変わるイベントハンドラを作ったんですが
    function func(???){
    for(i=1; i<=引数の数)
    array[1] =
    }
    とやる場合どーすればいいんでしょ?

    853 = :

    ごめんなさい、書いてる途中にかきこみしてしまいました

    phpと組み合わせて

    onclieck="func(a,b~n)"
    と中の引数が1~複数に変わるイベントハンドラを作ったんですが

    function func(a1,b1~n1){
      for(i=1; i<=引数の数; i++)
      array[i] =第 i 引数(a1);
    }
    とやる場合どーすればいいんでしょ?

    854 = :

    function hello(){
        alert(arguments) // [1,2,3,4,5,6]
    }

    hello(1,2,3,4,5,6);

    855 = :

    PHP関係あるんかいな
    オンクリークじゃ動かんで

    856 = :

    php関係あるというか
    phpでファイル読み込んで、そのファイルの数だけ引数作るという感じです
    ファイル数が3個なら
    func(a,b,c)
    7個なら
    func(a,b,c,d,e,f,g)
    という具合に

    857 = :

    絶対設計を見直すことをおすすめします

    858 = :

    >>852

    array[1] = a1;
    array[2] = b1;
    array[3] = c1;

    array[n] = n1;

    ってこと?

    function func() {
    var x = array[0];
    array = [];
    Array.prototype.push.apply(array, arguments);
    array.unshift(x);
    }

    859 = :

    >>857
    それは心の底から思うが、言われて直せるなら最初からこんな設計してないw

    861 = :

    おっと、微妙に無駄なことしてたな。

    function func() {
    array = [array[0]];
    Array.prototype.push.apply(array, arguments);
    }

    862 = :

    今ひらめいた

    a,b,c,d,e~をさいっその事
    a/b/c/d/e~って一つにしちゃって
    それを/でスプリットすればいいんじゃね?
    そーすりゃarray.lengthで数取り出してarray[1]で値も取り出せる

    863 = :

    >>862
    普通、PHPでJavaScriptのコード吐くなら、最初からJavaScriptで読めるデータ作る。
    つまり

    var arr = [ a1, b1 c1, ... n1 ];
    ↑この一行をPHPで吐くようにしてる。
    わざわざ引数することも1つの文字列にすることもない。てかそんな発想普通出てこないw

    864 = :

    >>861
    Array.prototype.slice.call(arguments); 

    865 = :

    C++等にあるような、インスタンスを作らずに「クラス名.変数名」のような感じでアクセスできる
    クラスstatic変数を作りたいのですが、prototype内に変数を作って「クラス名.prototype.変数名」とする以外の手が今のところ見つかりません
    これ以外に効果的な方法ってありますでしょうか?

    870 = :

    >>869
    だから何が言いたいんだよ。
    >>852-853では、どこかで定義されてる配列 array の
    第一要素 array[0] を上書きしてないぞ。
    そこにデータが入ってた場合に、お前さんのコードでどうなるか
    分かってレスしてるんだよな?

    872 = :

    <script>
    var x = 0;
    function testEvent(e){
    console.log(e);
    x++;
    e.target.style.left += (x + "px");
    setTimeout("testEvent('" + e + "')",100);
    }

    window.onload = function(){
    var hoge = document.getElementById("hogehoge");
    hoge.style.position = "absolute";
    hoge.addEventListener("click", testEvent, false);
    }
    </script>
    <div id="hogehoge">hogehoge</div>


    hogehogeという文字をクリックすると、それが画面右にものすごい勢いで移動していくスクリプトを作りたかったのですが、うまくいきませんでした。
    調べてみたところ、setTimeoutでtestEventを呼び出したときに、イベントオブジェクト(e)を渡すのに失敗していました。
    e.target.style.left += (x + "px");の部分でe.targetがundefinedだと怒られました。

    console.logの結果を見てみると、clickイベントで呼び出されたtestEventの引数にはちゃんとMouseEventが渡されていて
    targetなどのプロパティを持っていることを確認できましたが
    setTimeoutで呼び出された場合は [object MouseEvent] とだけ出力されており、その中身は何もないという状態です。

    clickイベントによって渡されるイベントオブジェクトを使いまわすことはできないのでしょうか?

    875 = :

    setTimeout("testEvent('" + e + "')",100);
    の部分はsettimeoutの内部でeval的な事をしているのですね
    色々と理解できました。ありがとうございます。

    876 = :

    スタイルをまとめて追加するのに、style要素を作ってそこにテキストを入れる方法ではだめなんですか?
    スタイルを操作するインターフェイスが用意されているのには理由があるんですか?
    insertRuleとかaddRuleとか難しくてよくわかりません

    877 = :

    まあやってみろ
    IE6がオヌヌメ

    878 = :

    IEでおかしなことになるんですね
    どうもありがとうございます

    879 = :

    ユーザの入力値に変な値(制御文字)が紛れ込むのを防ぐために、
    str = str.replace( /[\x00-\x1F]/g, "" );
    とするのは有効でしょうか?
    改行コードも含めて制御コードを丸ごと消したいです。

    880 = :

    何に対して有効なのかが分からないとねえ
    クライアントサイドで完結してるなら意味はあるけど
    サーバーサイドで処理するためなら全くの無意味

    881 = :

    >>880
    ありがとうございました。
    サーバサイドでも実施すれば大丈夫ですか?
    PHPでできるかはまだ不明ですが。

    想定しているのはユーザが変なデータを送ってくるパターンです。

    882 = :

    >>881
    サーバに送ってくるのが前提ならサーバサイドでやらないと無意味。
    JavaScriptを介さずサーバに送信することができるから。

    883 = :

    >>882
    そんなことができるのですか!?
    では、入力値のチェックは、クライアント側では完全に無意味なのですね。
    サーバ側のチェック関数を強化するようにします。m(_ _)m

    884 = :

    var node = document.getElementById("hoge");
    var clone = node.cloneNode(true);
    //cloneへの処理
    node.parentNode.replaceChild(node, clone);

    何箇所も書き換える場合はクローンノードを作ってそっちで書き換えてから
    出来上がったものを一回で差し替えたほうがいいらしいのでやってみたのですが
    処理自体が多いので結局差し替えるまでの間待たされてその間操作ができません
    「//cloneへの処理」を見直す以外に何かいい方法とかありますか?
    定番のやり方とかあれば教えてください

    885 = :

    何やってんだ
    使うのはDocumentFragmentだろ

    886 = :

    しかしweb制作板って民度わりと高いんだな

    887 = :

    このスレは良い人ばかりだよ
    冗談も通じるし2chの良心

    888 = :

    >>885
    ページ上にもともとあるノード(実際にはその子孫ノード)に対して何箇所も書き加えるので
    ベースとなる元のやつを複製したほうが楽だなと思ったのですがフラグメント内に自前で構築するのですか?
    それともクローンノードをいったんフラグメントに入れておくんですか?
    cloneNodeで複製されたものは元のドキュメントから切り離されるらしいのでフラグメントと同じようなものだと思ってました

    889 = :

    <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>...</li>
    </ul>
    たとえばこういうのの各li要素を加工したいので
    ul要素ごとcloneNode(true)してから各li要素を加工して
    最後にul要素を差し替えれば楽だと思ったのですが
    documentFragmentをどう使うんでしょうか
    複数の要素をまとめて挿入するときの入れ物としてしか使ったことがないです

    890 = :

    Rangeを使えるなら
    range.selectNodeContents(ul);
    var df = range.extractContents();
    dfの子になっているliを加工した後
    ul.appendChild(df);

    この場合cloneNodeは使うな
    ulのイベントリスナーが消える

    891 = :

    >>888
    DocumentFlagmentはただのコンテナで合ってる。ドキュメントのノードを丸ごとcloneNodeして
    DocumentFlagmentに入れて操作して、最後に入れ替える、でおk。

    処理があまりに遅くて、ブラウザの反応が悪くなりすぎるのであれば
    処理の途中でブラウザが処理するタイミングを作るという手がある。
    小手先のごまかしだから、処理そのものの改善は前提だし、
    ブラウザの処理中に別のイベントが発生した場合の対処とか、一気に複雑になるけど。

    // 元処理
    function func() {
    /* 処理1 */
    /* 処理2 */
    /* 処理3 */
    }

    // 途中でブラウザに処理を渡すパターン
    function func() {
    setTimeout(f1, 0);
    function f1(){ /* 処理1 */ setTimeout(f2, 0); }
    function f2(){ /* 処理2 */ setTimeout(f3, 0); }
    function f3(){ /* 処理3 */ }
    }

    892 = :

    >>890-891
    レスどうもありがとうございます
    なんか急に難しい感じに・・・
    レス内容はまだ理解できていないのでよく熟読します

    893 = :

    >>891
    setTimeoutを使うと並行処理みたいなことが出来る的なことが
    検索したら書いてありました
    やってる意味がちょっと理解できました

    894 = :

    どうでもいいがsetTimeoutの最低値は4な

    895 = :

    >>893
    その理解でいいんだけど非同期処理は処理が衝突する可能性があるから衝突してはいけない処理は独自にロックする機構が必要だよ

    896 = :

    >>886
    このスレはともかく、板全体で見たらヒドいてw

    897 = :

    >>894
    え、そこって普通わざわざ最低値に合わせて書くもんなの?
    0のがメジャーじゃね?

    898 = :

    0は絶対にメジャーじゃない
    IE6かなんかで変なことになったから

    899 = :

    setTimeoutに衝突の心配なんてあったっけ?
    順番通り実行されるロジックがあれば大丈夫だろ

    900 = :

    >>899
    >>884を例にとると、#hode を操作する処理がもう一つあると衝突する
    一方が処理中であることを表すフラグをどこかにたてておけば回避できる


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について