のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,063,090人
昨日: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

    801 :

    >>800
    多くの初心者にとって、OSそのものがウィルスになっちゃうなw

    802 = :

    イカタコウイルスも
    avi.exeって注意書きしてるから意図には反してなくね?
    もう「これはウイルスです!実行したらHD全消去されます!」とかやっても逮捕されるレベル

    803 = :

    ぶっちゃけここで語らなければならない話題でもない

    804 = :

    >>800
    不具合を放置した放置した場合も適用されたはずだぞ。

    805 :

    6月16日に起きたgoogleのアルゴリズムの変更で何が変わったか。
    http://twitter.com/creditcardmiu/status/81112388589453312

    806 = :

    JavaScriptでヌルバイト攻撃に対処するにはどう書けばいいですか?

    807 = :

    >>806
    何も対処しなくていい

    812 = :

    IEは返ってくる数値がやたらでっかいな

    813 = :

    jwordが犯罪認定されると聞いてとんできました

    815 = :

    script
    function tdclick() {
        var td = document.getElementById('tbl').getElementsByTagName('td');
        for (var i = 0; i < td.length; i++) {
            td[i].addEventListener('click', function(){
                alert(td[i].textContent);
            }, false);
        }
    }
    window.addEventListener('load', tdclick, false);

    html
    <table border="1" id="tbl">
    <tr><th>AA</th><th>BB</th><th>CC</th></tr>
    <tr><td>A1</td><td>B1</td><td>C1</td></tr>
    <tr><td>A2</td><td>B2</td><td>C2</td></tr>
    </table>

    td[i]が定義されてないというエラーが出てイベントが登録できません
    forで回さずに
    td[0].addEventListener('click', function(){
        alert(td[0].textContent);
    }, false);
    td[1].addEventListener('click', function(){
        alert(td[1].textContent);
    }, false);
    このようにすれば登録できるみたいなんですけどどうやって登録するのが正しいのでしょうか?

    816 = :

    >>815

    function tdclick() {
    var nodes = document.getElementById('tbl').getElementsByTagName('td');
    for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener('click', strAlert(nodes[i].textContent), false);
    }
    function strAlert(str) {
    return function(){ alert(str); };
    }
    }

    window.addEventListener('load', tdclick, false);


    iがループで変化してる。どのセルをクリックしても td[6](=存在しない)を参照しようとする。
    クロージャ作って必要な値をしっかり切り離して固定しないとダメ。
    デバッガ使って、バグった時点のiの値を見れば原因の見当がついたはず。デバッガ覚えること推奨。

    817 = :

    >>816
    どうもありがとうございます
    firefoxのエラーメッセージ見てましたが使い方がよくわからなくて
    頑張ってデバッガの使い方を勉強します
    クロージャもよくわからないのでそちらも調べてみます

    818 = :

    >>815
    function tdclick() {
    var td = document.getElementById('tbl').getElementsByTagName('td');
    for (var i = 0; i < td.length; i++)(function(targetTd){
    targetTd.addEventListener('click', function(){ alert(targetTd.textContent); }, false);
    }(td[i]);
    }
    window.addEventListener('load', tdclick, false);

    多分解決してると思うけど、こういう書き方もある。

    819 = :

    これ何でテンプレにないのかね
    初心者がはまる黄金パターンだろ

    820 = :

    お茶飲んでたらふと思った。
    本当にやりたいことってたぶんこういうことだよなw

    function tdclick() {
    var nodes = document.getElementById('tbl').getElementsByTagName('td');
    for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener('click', function(){ alert(this.textContent); }, false);
    }
    }

    821 = :

    >>807
    ありがとうございます。
    アレはサーバサイドが対処するものなのですか?
    XSSはクライアントサイドで対処するもので、
    その質問の中で出てきたのでこれもクライアントサイドかと・・・。
    ユーザの入力値を、サーバ側のファイル系関数とかに
    ノーチェックで入れたりしなければ大丈夫ですよね?

    822 = :

    何もできない、が正しいな。
    ユーザーの入力データをJavaScriptが受け取る前に、
    ブラウザがそれをJavaScriptに渡すように処理するが、
    その処理に穴があるとマズいって話。

    823 = :

    >>815-819
    それは >>2 のQ7/A7をさして同じ問題だと言えばよい。
    それで真面目に考えない方はお帰り頂きたいと思っている。
    答えるほうもいちいちこねくり回さずにそうひとこと言えばいいのに。

    824 = :

    >>822
    ありがとうございます。
    ブラウザの作り次第、ということでしょうか?

    825 = :

    this問題とはまた別なんじゃないの

    826 = :

    解決方法という意味では、どちらもクロージャ使えってことで同じ。
    問題の内容としては、ループ内で変化する値を固定したいという話と、
    実行時のthisが違うという話は全く別のことだな。

    827 = :

    >>818は動かないでしょforの外にあるし
    for()(function(){
    はコード的にもちょっと気持ち悪い・・・

    for () {
    (function(hoge){
    hoge.addEventListener();
    })(td[i]);
    }

    828 = :

    >>820はクロージャーなのか?

    829 = :

    ループ回さなくてもすむならループ回さない方向で

    <html>
    <body>
    <table border="1" id="tbl">
    <tr><th>AA</th><th>BB</th><th>CC</th></tr>
    <tr><td>A1</td><td>B1</td><td>C1</td></tr>
    <tr><td>A2</td><td>B2</td><td>C2</td></tr>
    </table>
    <script>
    (function(){
    document.getElementById("tbl").addEventListener("click",function(event){
    if(event.target.nodeName.toLowerCase()==="td"){
    alert(event.target.textContent);
    }
    },false);
    })();
    </script>
    </body>
    </html>

    830 = :

    >>828
    ・クロージャかどうかという点では、厳密な意味で言えばクロージャ。
     入れ子関数が1つでも生きてる限り、親関数のCallオブジェクトは破棄されない。

    ・クロージャにする意味があるかどうかという点では、この場合は意味はない。
     関数に名前つけて外に出してしまえば、無駄にメモリ確保を続けることがなくなる。
     もちろん、普通はそうするべき。

    >>820>>815の解決方法として適切かどうかについては、
     >>815自身が動作を理解して考えるしかないな。
     動作の意味が違っているわけだから。

    831 = :

    結果が一緒なら動作の意味なんて考えなくてもいい
    というスタンスだったがこのままじゃヤバイか
    キミらの話難しくてついていけないぜ

    833 = :

    >>831
    処理が最も単純なのは>829。これで解決するならこれでいい。
    ただ、tableにいろいろ追加・変更したり、腐ったブラウザ(IE8以前とか)に対応させようとすると、
    書き換えなきゃいけない部分がいろいろ出てくる。

    発想として最も単純なのは>820。変更があるとしても、書き換える部分はそんなに多くないし、
    その場合、>829の「イベントは発生するが処理から除外する」という発想よりは
    「イベントハンドラをつけない」という発想の方が、たぶん分かりやすい。

    問題の本質が「対象のtextContentを特定する」ことではなくて、「 i を固定すること」だった場合、
    >829>820も参考にならない。たとえばtdの数と同じだけの要素数を持った配列が別にあって、
    それを各イベントハンドラに対応させようとするなら、>816とかを参考にしてクロージャ作るしかない。

    どれが>815にとって本当にちょうどいい回答なのかは、>815の質問だけでは判断し切れない部分があるわけ。
    動作の意味がどうこうってはそういうこと。

    834 = :

    まとめ乙

    835 = :

    >>829のはクリック毎に毎回判定する感じなのかな?
    効率は悪そうに見えるけどどうなんだろう?

    836 = :

    >>835
    この程度なら無視できるレベルじゃないのかな
    メモリ効率はこっちの方が良さそう

    837 = :

    それぞれどういう関係なんですか
    数をたくさん登録してメモリを使うか
    広い範囲を指定してバブリング毎に調べてCPUを使うか?

    838 = :

    >>829は対象のtd要素ノードが replaceChild されても動きますが、他は動きません。

    839 = :

    質問です。

    下記サイトを見ながら、画像をマウスオーバーするとプルダウンメニューが出るようにしたのですが、
    画像の段が2段になると1段目画像のプルダウンメニューが2段目画像の下に潜ってしまいます。
    http://www.css-lecture.com/log/javascript/jquery-droppy-menu.html
    http://www.css-lecture.com/template/2009/0622/

    <試した環境>
    OS: WinXP 32bit SP3
    ブラウザ: IE6~8、Firefox3.6、Chrome12.0
    webサーバ: 外部のIIS、Apache

    IE6~8とIISという組み合わせでのみ問題が出ます。どうしたらいいでしょうか?

    840 = :

    >>839
    上下関係はJavaScript関係ない。CSSのz-index

    841 = :

    すっごい初歩的な質問なんですが

    function a(){}
    function b(){}

    とあるとき、function bを実行したときfunction bの中でfunction aを実行するにはどうしたらよいのでしょうか?

    842 = :

    >>841
    function b(){ a(); }

    843 = :

    >>842
    ありがとうございます!

    844 = :

    >>841
    「原理原則」や「机上の空論」を正論と思って賞賛してよいのは中学二年生まで

    845 = :

    みんなこれフォロー
    http://d.hatena.ne.jp/sugyan/20110616/1308203734

    ここに乗ってるのフォローしてくださいお願いします

    お願いですjavascriptのみなさんおねがいです

    846 = :

    >>840
    すいません、仰るとおりでした。ありがとうございました。

    847 = :

    使い終わった変数にnullを代入するのはどういう場合にするんですか?常にしたほうがいいんですか?

    848 = :

    循環参照を切るときかな

    849 = :

    >>847
    理由は2つ。

    1つは「あとでその変数を調べることがあって、
    その時にnullが入ってることを期待したい」場合。
    たとえば処理済みの印代わりとしての意味。

    もう1つは「その変数に何らかの参照が入っていて、
    別の何かを代入することで参照を切りたい」場合。
    もはや使わないオブジェクトの参照を切って、メモリの解放を期待する意味。

    このどちらでもないなら不要。

    850 = :

    >>848-849
    どうもありがとうございます
    不要な場合のほうが多いんですね
    あんまりよくわかっていないのでそのままにしておきます


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

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


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