元スレ+ JavaScript の質問用スレッド vol.87 +
JavaScript覧 / PC版 /みんなの評価 :
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 を操作する処理がもう一つあると衝突する
一方が処理中であることを表すフラグをどこかにたてておけば回避できる
類似してるかもしれないスレッド
- + 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
トップメニューへ / →のくす牧場書庫について