0

script.jsすべてのページに (とともに) 挿入されるスクリプト (この質問の目的: ) がありますjquery.js
script.jsは、余分な element( elem) をページに追加することになっています。これをクリックすると、my_funcinsideが呼び出されscript.jsます。

問題はReferenceError: my_func is not defined、要素をクリックすると , が常に存在することですが、 で定義されていscript.jsます。「隔離された環境」と関係があることに気づきました..しかし、この問題を解決する方法がわかりません..

PS .: Chrome、JS、JQuery は初めてです。
歴史: Python :)


いくつかのコード (elem を追加するだけ):

function on_ready(){
    var wanted = get_desired() // fetch desirable elements
    add_to_all(wanted) // this calls add for every element in wanted
}
function add(obj_to_edit) {
    if (obj_to_edit.css('position') == 'static'){
        obj_to_edit.css('position','relative')}

    var elem = $("<div ... onclick='my_func(this)'>...</div>")

    obj_to_edit.mouseenter(show_button);
    obj_to_edit.mouseleave(hide_button);
    elem.prependTo(obj_to_edit);
    elem.hide()
}

function my_func(elem){
    console.log($(elem).parent().html)
}

$(document).ready(on_ready);

アイデアは、誰かが特定のオブジェクトにカーソルを合わせてelemポップアップし、ユーザーがそれをクリックすると、メッセージをログに記録することです..

4

2 に答える 2

0

最初の質問は、なぜこれを行うのかです。申し訳ありませんが、純粋に機械的な問題を超えて人々に本当に助けてもらいたい場合は、それに答える必要があります.

たとえば、何をしているかによっては、可視性が状態::beforeに応答する疑似要素を使用することで、はるかにうまくいく可能性があります。hover

.desired::before {
    content: "Press me!";
    display: none;
}
.desired::before:hover {
    display: block;
}

それだけです。挿入も、mouseenter または mouseleave イベントもありません。純粋な CSS だけです。

イベントハンドラーの設定に関しては、古いスタイルの属性を使用しているのは少し奇妙です。onclickもちろん、最新のアプローチは次のようになります。

elem.on("click",function(){...});

または、もう少しきれいに

elem.on("click",my_func);

my_func はthis、問題の要素として次のように書き換えられます。

function my_func(){
    console.log($(this).parent().html);
}

positionCSS プロパティの値を に変更して達成しようとしていることがわかりませんrelative。などのプロパティも指定しない限り、これは効果がありませんtop。ところで、positionofのチェックstaticはおそらくあなたが望むことをしないでしょう -- このチェックは、style属性で指定されているか、以前に.css呼び出しによって設定されているかのいずれかによって、問題の要素が static の明示的な位置を持っている場合にのみ成功します。したがって、プロパティ値を に変更するrelativeことはおそらくありません。

いずれにせよ、何らかの理由で元の HTML にこれがなく、実際に動的に追加したい場合は、必要な要素にクラスを追加し、CSS ルールを使用して設定positionしたり、その他のプロパティを設定したりする方がはるかにクリーンです。要素ごとに CSS をいじるのに比べて、変更したい。それが、クラスと CSS ルールの目的です。

get_desired().addClass("desired");

get_desiredjQuery DOM コレクションを返すと仮定します。あなたが連鎖スタイルの愛好家なら、ここでもイベントハンドラーを設定できます

get_desired().addClass("desired").on("click",my_func);

次に、ちょうど

.desired {
    position: relative;
}

あなたが提起している特定の問題に関しては、コードが実際に表示されているとおりであれば、もちろんmy_func見つかるはずです。だから何か他のことが起こっています。ここにいる人に問題の追跡を手伝ってもらう唯一の方法は、すべてのコードを表示することです。

于 2013-05-12T13:44:39.217 に答える