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

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

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

    751 = :

    あなたは実行される順番が分かっていない。「ASPが処理」→「結果のHTML+
    JavaScriptができる」→「ブラウザに送られる」→「表示、JavaScript実行」
    という順番だからそのように書いたらASP側がまず実行されるのは当たり前。
    JavaScriptからサーバに結果を送信して、サーバ側でそれを受け取って
    結果を書き込む、というふうにしないと。あとは自力で勉強してね。

    752 = :

    特定の要素が生成されるタイミングで関数を実行したり出来ますか?

    753 = :

    その要素が「どうやって」生成されるかによるんでは。

    754 = :

    >>751
    理解のあやふやだった部分でした。<サーバ側の処理、クライアント側の処理
    submit()し、次ページで書き込み処理することで意図通りに動かすことが出来ました。
    どうもありがとうございました。

    755 = :

    >>752
    onload

    756 = :

    XMLHttpRequestの戻り値として、バイナリデータを受け取って
    ブラウザ側でダウンロードダイアログを表示させて
    取得したバイナリデータをダウンロードさせることって可能でしょうか

    現在YUIのConnection ManagerでXMLHttpRequestを
    サーバに投げてバイナリデータを取得する所まで
    確認できたのですが、ブラウザ側にコレを認識させる事ができない状態です。

    758 :

    >>757
    なにがわからんの?

    759 = :

    >>758
    要素の重なり等を考慮すると、最終的に表示されている色は、
    スタイルシートの情報からは取得できないですね。
    質問内容が無謀でした。

    763 = :

    JavaScript + jQuery + localStorage ってブラウザ間の挙動の違いは大きいですか?
    Firefoxで開発したのがChromeで動かなくて凄くショックだったんですが・・・
    挙動の違いを解説してるページとかあったら教えてください

    764 = :

    自己解決しましtあ^^

    765 = :

    要素を削除するとき
    obj.parentNode.removeChild(obj);
    以外の簡単な方法はありますか?

    767 = :

    >>645
    こういうのを使えるならXMLHttpRequestで取得してからこいうのを使ってDOM操作するほうがいいの?
    iframeに読み込むのはよくないの?
    jetpackもHTMLをDOM操作するためにiframeに読み込む仕組みを採用しているっぽいですが
    > SCRAPBLOG : Jetpack SDK 0.4 の Page Worker API
    >http://www.xuldev.org/blog/?p=792

    768 = :

    http://gist.github.com/658148

    769 = :

    質問です。
    リンクにaddEventListener('click',~
    とイベントを追加したのですが、関数の中でreturn false;してもリンク先へ移動してしまいます。
    どうすればリンクの本来の動作を止めることが出来ますか?

    770 = :

    >>767
    Jetpack のAPIを利用することが前提にあるようだが、違うのだろうか。
    他に適切なAPIがあるのであれば、勿論それでも構わない。

    が、標準の DOM, ECMAScript メソッドを利用することが前提としてあるなら iframe に読み込むのはお勧めしない。
    iframe に読み込むということはDOMを document に結びつけるということ。当然、それに関わる処理も働く。
    ドキュメントに挿入しなくて済む処理なら、わざわざ iframe に読み込む必要はないと思う。

    771 = :

    すいません。自己解決しました。

    772 = :

    >>769
    return false; はIEが独自実装した仕様で HTML5 もそれに追従しているが、DOM 本来のやり方ではない。
    DOM では event.preventDefault() を規定している。

    773 = :

    >>771
    自己解決したなら、解決法を書いてほしい。

    774 = :

    >>770
    iframeだと再レンダリングされて
    それが問題ってことですか
    わかりました
    どうもありがとうございます

    775 = :

    >>773
    >>772さんの仰られた方法で解決しました。

    777 = :

    スレチ

    778 = :

    スレチでしたか、失礼しました

    781 = :

    ループ内で関数を定義するコードを書いたところ、JSLint に Don't make function within a loop.
    と怒られてしまいました
    どういう理由があってこのエラーが出るのでしょうか

    コードは以下の通りです
    Function.prototype.createClass = function(class_name, proto){
    proto = proto || {};
    var c = class_name.split('::');
    var target = this;
    for(var i = 0; i < c.length; i++){
    if(!target[c[i]]){
    target[c[i]] = function(){};
    }
    target = target[c[i]];
    }
    target.prototype = proto;
    };

    782 = :

    ループ中にfunctionを作ってはならないってそのまんまじゃないか

    for(var i = 0; i < c.length; i++){
    if(!target[c[i]]){
    target[c[i]] = function(){}; //←ここ
    }

    783 = :

    >>782
    ですので、なぜ作ってはいけないのかその理由が知りたいのです

    784 = :

    ループ内で作れるならループ外でも作れるでしょって事じゃねーの

    785 = :

    自己解決しました

    >>784
    全然違います

    var t = {};
    for(var i = 0; i < 10; i++){
    t[i] = function(){
    alert(i);
    }
    }

    としたときに、
    t[0] を呼び出しても t[1] を呼び出しても常に 9 が表示されます
    どうやらクロージャ内でうまくインデックスの値を参照できないようです

    786 = :

    そんな書いてないコードの事なんかわかんねーよ
    for (var i=0;i < 10;i++) {
     t[i] = (function(index){alert(index)})(i);
    }
    ほれ

    787 = :

    あ、すまんそのままだと参照というか実行されるな
    でもまぁクロージャで参照したいならそんな感じで書けば良い
    どちらにせよ同じエラーは出ると思うがな

    788 = :

    >>785
    だからクロージャが参照している変数「i」は1個でしょ。
    そのiは変更していっているんだから、t[1]でもt[0]でも
    変更された現在のiを参照するに決まっているじゃない。
    クロージャってそういうもののためにあるわけで。自分で
    勝手に書いた時点のiで固定されて欲しいとか思っても
    そう書かなかったらそうなるわけがない。
    そもそもアンタはFAQのQ14/A14を読んだのか。読んでない
    のならどっかよそに行って欲しいね。読んだけど理解でき
    ないとかなら説明するけどさー。

    789 = :

    >>786
    JSLintご存知ない?
    質問の意図は「JSLintで静的に解析したとき、このエラーが出るのはどんな落とし穴があるためか」でしたが、
    これを知らなかったが故に変に解釈されてしまった気がします
    申し訳ないです

    >>788
    Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
      「"...this..."」とか「function(){...this...}」ではうまく行きません。
    A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。
      「function(x){return function(){...x...};}(this)」のようにthisを別の変数に
      束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中)

    この情報からクロージャと変数のスコープの関係を類推して
    更に今回の落とし穴になりうる条件を類推するのは無理があるかとw

    790 = :

    <head>
    <script type="text/javascript">
    function func1(str) {                       ←ココ
    alert(str + "がクリックされました");
    }

    function init() {
    alert("ドキュメントがロードされました");
    }
    window.onload = init;
    </script>
    </head>

    <body>
    <form id="myForm" name="myForm"><p>
    <input type="button" value="ボタン1"
    name="button1" onclick="func1('ボタン1');">
    </p></form>
    </body>

    とあるのですが
    このfunc1(str)のstrって何なのでしょうか?
    strにonclickの'ボタン1'が格納される事はわかるのですが、変数でもないようですし、初心者ですみません

    791 = :

    >>790
    引数の1番目に指定されたものが入ってる変数だよ

    792 = :

    >>789
    まずJSLint関係ないと思うぞ?
    Don't make function within a loop.
    これの訳を考えてみろよ

    で、君が原因だと思ってるiの参照を解決できる方法はこんな感じだけど
    for (var i=0;i < 10;i++) {
     t[i] = (function(index){
          return function () {
               alert(index);
          };
         })(i);
    }
    これでやっても同じメッセージは出る

    >>790
    <input type="button" value="ボタン1"
    name="button1" onclick="func1('ボタン1');">
    の onclick="func1('ボタン1');"にあるボタン1

    793 = :

    >>785
    で、>>781の原因はなんだったんだ?
    そのコードを実際にブラウザで動かしたらエラーをはかないから、俺はJSLintがおかしいと思ったけど。
    >>792も言っているけど、その問題は>>785のクロージャ関係と無関係だと思うよ。
    function(){};の中身がわからないから確かではないけど、普通のforで回すだけなら、target = this;はいらないとおもうよ。

    794 = :

    だからt[0]とかが呼ばれる時はiは別のものをさしてしまっている。
    t[i]=(function(x){return function(){alert(x);}})(i);
    とすればt[i]に入れた時のiの値が関数が呼ばれる時に作られる
    環境のxに渡されて保持され、それをクロージャから参照している
    からiその時点のiの値が取れると。

    795 = :

    >>791
    varで宣言しなくても変数になると言う事なんでしょうか?
    入門書やってる程度なので、ちょっとよくわからんとです

    796 = :

    >>795
    関数の引数(strの事)に関してはvarはいらない
    関数と引数について勉強すれば良いと思う

    797 = :

    >>792
    最初に提示した例ではそもそもクロージャになっていないので問題なく動くはずです
    JSLintでメッセージが出る部分は落とし穴となる可能性の高い部分
    メッセージの内容については「してはいけない」としか書かれていないです
    なぜこのようなメッセージを出さなければいけないか、どんな落とし穴があるのかを知りたく質問したのです
    原因さえはっきりしていればそのメッセージをスルーするという選択肢もあるでしょう

    >>793
    問題はJSがブロック単位の変数のスコープを持っていないことです
    なので、

    var t = {};
    for(var i = 0; i < 10; i++){
    t[i] = function(){
    alert(i);
    }
    }
    t[0]();



    var t = {};
    var i = 0;
    for(; i < 10; i++){
    t[i] = function(){ alert(i) };
    }
    t[0]();

    と解釈され、t[0] を呼び出している部分では i = 9 となり、9が出力されるわけです
    これを解決するには >>792 のようにクロージャで変数をバインドする必要があります
    JSLintは落とし穴になりそうな部分を警告してくれているだけなのでおかしくはないとです
    target = this は 普段 jQuery 書いているのでその癖ですw

    798 = :

    なんだJSLintはエラーじゃなくて注意だったのか。
    >>797
    いや、スコープの事なんか知ってるよ。

    てか>>781から>>785の変化が大きすぎだろw
    書いてないことで「違います(キリッ」なんて言われてもねぇ・・・

    799 = :

    キチ

    800 = :

    >>797
    最初に示した例でも同じ警告は出るわけだが・・・
    難しく考えすぎだろ
    こういうLint系って落とし穴以外にも
    オーバーヘッドが発生する場合等も警告だすよ
    もうちょっと単純なテストからしてみたらどうよ
    結局どこが原因か切り分けできてないんでしょ?

    因みに>>781のコードでfunctionを外部化し、>>781のコードの前に持って行き
    その関数を代入するとその警告は消える


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

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


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