2

イベント(onClickイベントなど)がJavaScriptコードを使用してWebページで実行されたときに呼び出されるjavascript関数を実行しようとしています。次のようなイベントから関数を取得しています:

var attributval = document.getElementsByTagName("a").getAttribute('onClick');

そして、私はこのオブジェクト(実際にはjavascript関数)を関数として実行しようとしています(この例にあると仮定して、試しました:

var attributval = document.getElementsByTagName("a").getAttribute('onClick');
attributval() = function(){attributval};
attributval();

しかし、うまくいきませんでした。

4

7 に答える 7

5

DOM 属性は JavaScript プロパティと同じではありません (同じ名前を持つことはできますがonclick)。使用する必要があります

var attributval = document.getElementsByTagName("a")[0].onclick;

JS オブジェクトから関数 (または ) を取得します (プロパティに対して を返す可能性が最も高い とはnull対照的に)。getAttribute()toString()

現在、 l-value ではないためattributval() =、不正な構文attributval()です (代入できません)

attributval();動作しますが、2 行目 (違法な JavaScript) がないと、元の A 要素onclickハンドラー (定義されている場合) が呼び出されるか、例外がスローされます (onclickハンドラーがの場合null)。

于 2012-05-03T16:10:00.660 に答える
0

get attribute を使用すると文字列が返されるため、唯一の方法はeval(onclickString)またはを使用することですvar fn = new Function(onClickString); fn();

于 2012-05-03T16:11:37.223 に答える
0

attributval単なる文字列ですよね?このコードを信頼する場合は、eval(attributval)-- で実行しますが、 への参照は機能しthisません。

おそらく必要なのは、イベントを手動でトリガーすることです。jQuery はそれを簡単にします。

于 2012-05-03T16:12:14.937 に答える
0

関連性があると思われるので、jQuery を使用してイベントを操作する方法について簡単な回答を追加すると思いました。

// Select the link using it's ID field (assuming it has one)
var myLink = $('a#myLink')

// Add a click event to the link
myLink.on('click', function(e) {
    console.log("I've been clicked!");
});

// Trigger the click event manually. This would result in the above
// function being run. Interestingly, this will not cause the browser
// to follow the link like a real click would
myLink.trigger('click');

// Remove the click event (this removes ALL click events)
myLink.off('click');

// Add a click event to the link that only runs once, then removes itself
myLink.one('click', function() {
    alert("I'll only bother you once!");
});

// Add a click event that you can identify from other click events.
// This means that you can trigger it or remove it without bothering other
// click events
myLink.on('click.myClick', function() {
    alert("This click event has been identified as 'myClick'");
});

// Now you can trigger it without triggering other click events
myLink.trigger('click.myClick');

// And remove it, also with no harm coming to other click events
myLink.off('click.myClick');

お役に立てれば

于 2012-05-03T16:36:53.580 に答える
0

関数の周りに関数を作成する試みをスキップします。それを呼び出すだけです:

var attributval = document.getElementsByTagName("a")[0].onclick;
attributval();
于 2012-05-03T16:10:05.997 に答える
0

試す

var attributval = document.getElementsByTagName("a")[0].getAttribute('onClick');
于 2012-05-03T16:10:06.503 に答える
0

クリック以上のことをしたい場合は、JavaScript を介してリンク (または任意の要素) のクリック イベントをトリガーすることは可能ですか?での Chris McDonald の回答 3 番目のコメントに注意する必要があるかもしれませんが、法案に適合しているようです。

于 2012-05-03T16:29:20.620 に答える