2017-01-06 13 views
0

を持つタグをプログラムでクリックします。プログラムで「拡大」アイコンをページ上で3回クリックしようとしています。 <a>が構成されていますjQueryプログラムでjavascript:void(0)

<a class="get-plus" title="zoom in" href="javascript:void(0)" style="display: inherit;">&nbsp;</a> 

I持って準備ができて文書に呼び出され、次のコード、:

function zoomIn() { 
    // Zoom in 
    for (var i = 0; i < 3; i++) { 
     $('a.get-plus').trigger('click'); 
     alert(i); 
    } 
} 

私はアラートループ動作しますが、ズーム機能が動作していないこと、わからない取得どのように修正するか、これを改善するための方法?

+2

Hmmm ..リンクにはどのようにズーム機能が付属していますか?"javascript:void(0)"は何もしないので、私の推測ではズーム効果は何とか別の方法で起こりますか? – MacPrawn

+0

私はorgチャートにjavascriptプラグインを使用しています。jsに埋め込まれています(実際にはそれを処理するコードです)。しかし、私は縮小されたコードを理解できません。 – troyrmeyer

答えて

1

クリックイベントを発生させる方法は機能しません。

代わりHTMLElement.click()を使用します。

HTMLElement.click()メソッドは、要素上でマウスクリックをシミュレートします。

サポートされている要素(タイプの1つなど)でclick()が使用されると、要素のクリックイベントが発生します。このイベントは、ドキュメントツリー(またはイベントチェーン)の上位の要素にバブルアップし、クリックイベントを発生させます。 1つの例外:click()メソッドは、実際のマウスクリックが受信されたかのように要素にナビゲーションを開始させません。

$('a.get-plus').trigger('click'); 

に:

したがって、からそれを変更

$('a.get-plus').get(0).click(); 

例:

function zoomInChanged() { 
 
    // Zoom in 
 
    for (var i = 0; i < 3; i++) { 
 
    setTimeout(function() { 
 
     $('a.get-plus').get(0).click(); 
 
    }, i * 1000); 
 
    } 
 
} 
 

 
function zoomIn() { 
 
    // Zoom in 
 
    for (var i = 0; i < 3; i++) { 
 
    $('a.get-plus').trigger('click'); 
 
    console.log(i); 
 
    } 
 
} 
 

 
console.log('zoomIn:'); 
 
zoomIn(); 
 
console.log('zoomInChanged:'); 
 
zoomInChanged();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<a class="get-plus" title="zoom in" href="javascript:console.log('Clicked')" style="display: inherit;">&nbsp;</a>

More reading

jQueryのイベント処理システムは、ネイティブブラウザのイベントの上の層です。 .on( "click"、function(){...})を使ってイベントハンドラを追加すると、jQueryの最初の追加時にそのハンドラへの参照が格納されるため、jQueryの.trigger( "click")を使ってトリガすることができます。

さらに、JavaScriptはonclick属性内でトリガされます。

ファイル入力ボックスまたはアンカータグをクリックするなどのネイティブブラウザイベントを模倣するために、.trigger()関数を使用することはできません。これは、これらのイベントに対応するjQueryのイベントシステムを使用してイベントハンドラがアタッチされていないためです。

+0

['.trigger( 'click')'](http://api.jquery.com/trigger/)が動作しない理由と['.click()'](https:// api。 jquery.com/click/)は何ですか?この例で '.get()'は何をしますか?それは '.eq()'でも使えますか? –

+0

これはうまくいきますが、一度に「ズーム」するだけで、他の2回は繰り返さないタイミングですか? 「ズーム」あたり約0.5秒のアニメーションがあり、他のアニメーションを停止する可能性があります。 – troyrmeyer

+0

@troyrmeyer回答が更新されました。クリックごとに1秒の遅延があります。 – gaetanoM

0

<a href="javascript:void(0)">は、何かをクリックできるようにするためのハックですが、ユーザーを新しいページに移動させることはありません。これは決してあなたのズーム機能に関連していません。

ほとんどの場合、画像を拡大表示できるようにするために、ライブラリやプラグインを使用しています。ドキュメントを読んで、ライブラリがプログラムでズームをトリガする方法を提供しているかどうかを確認する必要があります。

関連する問題