元スレ+ JavaScript の質問用スレッド vol.87 +
JavaScript覧 / PC版 /みんなの評価 :
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
どうもありがとうございます
不要な場合のほうが多いんですね
あんまりよくわかっていないのでそのままにしておきます
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.77 + (1001) - [97%] - 2010/5/8 19:06
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.107 + (1001) - [95%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.117 + (1009) - [95%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.137 + (1003) - [95%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.127 + (1001) - [95%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [95%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.94 + (1001) - [95%] - 2012/1/8 15:46
トップメニューへ / →のくす牧場書庫について