[解決済み] Can I call jQuery's click() to follow an <a> link if I haven't bound an event handler to it with bind or click already?
Question
I have a timer in my JavaScript which needs to emulate clicking a link to go to another page once the time elapses. To do this I'm using jQuery's
click()
function. I have used
$().trigger()
and
window.location
also, and I can make it work as intended with all three.
I've observed some weird behavior with
click()
and I'm trying to understand what happens and why.
I'm using Firefox for everything I describe in this question, but I am also interested in what other browsers will do with this.
If I have not used
$('a').bind('click',fn)
or
$('a').click(fn)
を呼び出してイベントハンドラを設定し、その後
$('a').click()
は全く何もしていないように見えます。ブラウザが新しいページを読み込まないため、このイベントに対するブラウザのデフォルトハンドラを呼び出さないのです。
しかし、最初にイベントハンドラを設定すると、イベントハンドラが何もしなくても、期待通りに動作します。
$('a').click(function(){return true;}).click();
これは、あたかも私自身がaをクリックしたかのように新しいページを読み込みます。
この奇妙な動作は、私がどこかで何か間違ったことをしているからなのか? と、なぜ
click()
は、自分でハンドラーを作成していない場合は、デフォルトの動作で何もしないのですか?
Hoffmanが私の結果を複製しようとしたときに判断したように、私が上で説明した結果は実際には起こりません。昨日私が観察した事象の原因が何であったかは分かりませんが、今日、それが私が質問で説明したものでなかったことは確かです。
つまり、ブラウザでクリックを偽装することはできず、jQueryが行うのはイベントハンドラの呼び出しだけというのが答えです。ただし
window.location
を使用してページを変更することができます。
解決方法は?
興味深いことに、これはおそらくjQueryに対する機能要求(つまりバグ)でしょう。jQueryのclickイベントは、jQueryイベントを要素にバインドした場合にのみ、その要素のクリックアクション(DOM上ではonClickイベントと呼ばれます)をトリガーします。jQueryのメーリングリスト( http://forum.jquery.com/ )に報告する。これは望んだ動作かもしれませんが、私はそうは思いません。
EDIT
私はいくつかのテストを行い、あなたが言ったことは間違っている、あなたが'a'タグに関数をバインドしても、それはまだhref属性で指定されたWebサイトに移動しません。次のコードを試してみてください。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
$(document).ready(function() {
/* Try to dis-comment this:
$('#a').click(function () {
alert('jQuery.click()');
return true;
});
*/
});
function button_onClick() {
$('#a').click();
}
function a_onClick() {
alert('a_onClick');
}
</script>
</head>
<body>
<input type="button" onclick="button_onClick()">
<br>
<a id='a' href='http://www.google.com' onClick="a_onClick()"> aaa </a>
</body>
</html>
直接リンクをクリックしない限り、google.comに行くことはありません(コメントされたコードの有無にかかわらず)。また、クリックイベントをリンクにバインドしても、ボタンをクリックすると紫色にならないことに注意してください。リンクを直接クリックした場合のみ、紫色になります。
ブラウザがjavascriptによる偽のクリックをサポートしないため、.clickは'a'タグでは機能しないようです。つまり、javascriptで要素をクリックすることはできないのです。a' タグを使えば、onClick イベントを発生させることはできますが、リンクの色は変わりません(訪問したリンクの色になります、ほとんどのブラウザのデフォルトは紫です)。なぜなら、href属性に移動する行為はonClickイベントの一部ではなく、ブラウザにハードコードされているからです。
関連
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] HTMLマークアップのどこに<script>タグを記述すればよいですか?
-
[解決済み] フォーム送信のようなJavaScriptのポストリクエスト
-
[解決済み] どのDOM要素にフォーカスがあるかを調べるには?
-
[解決済み] テキストボックスのEnterキーで、JavaScriptでボタンクリックをトリガーする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
JSアレイループと効率解析の比較
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
vue ディレクティブ v-html と v-text
-
[解決済み】Node.js Error: Cannot find module express
-
JavaScriptのStringに関する共通メソッド
-
JavaScriptのgetElementById()メソッド入門
-
jq は html ページとデータを動的に分割する。