2012-01-13 2 views
6

。 func1は、function2がtrueを返す場合にのみ呼び出されます。右 ? jqueryのを学んでjqueryのHREFとonclickの分離

は、私はonclickのは良くないことが判明し、減価償却ので、私は今、私の質問がある

<a id="id101" href="javascript:func1();">Link</a> 
jquery 
$("#id101").click(func2() { 
    //same stuffs from before which was in func2 
}); 

に上記のコード変更:

クリックハンドラが取られた後、ケア、hrefの中のJavaScriptで何ができますか? func2内の条件が真である場合、func2のjQueryクリックハンドラでfunc2の中でfunc1を呼び出す必要がありますか? またはいくつかのエレガントなソリューションはありますか?

また、HTMLとイベントコードを分けるのは良いですが、ここではIDがid101のこの要素には多くのイベントが関連付けられており、大きなファイルでは多くのイベントを含むhtml要素が多すぎる可能性があります。だから、私は多くのイベントハンドラを持つ大きなページを持っている場合、どのようにどのhtml要素がどのように多くのイベントが関連付けられているかを知ることができますか?

要求されるように上記の質問に詳しい説明、

私はid101れるonmouseover、れるonmouseoutおよび他の多くのようなイベント、onclickを持つことができます意味。多くのそのようなイベントハンドラを持つ多くのそのような要素が存在する可能性があります。どのように私はそれらを見つけるのが良いですか?古いスタイルでは、このようなイベントハンドラはすべて、このようにまとめられます。

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>

これはいいですが、少なくとも私はこのonclickイベントがあることがわかります。しかし、これをjqueryファイルに分割するときに、id101のjqueryファイルを最初に検索してから関連付けられたイベントをチェックする必要があります。これはhtmlファイルに多くの要素と関連するイベントハンドラを持つ問題です。その情報を見つける良い方法はありますか?

+0

すべての「HREF」ではJavaScriptを置かないでください。イベントハンドラでそれを(条件付きで、必要なら)実行してください。 – Pointy

+0

@endroix:Pointyが言ったように、 'href'属性全体を削除するだけです。インラインJSは悪いニュースです。そして、jQueryセレクタでバインドする場合は、IDを示すために '#'を使用する必要があります。今、あなたのjQueryは何もしないでしょう。 '$("#id101 ")。click();'に変更し、 'href =" x "'全体を削除してください。 – Josh

+0

@ジョシュ、私はそれを忘れた#。今更新された – newcoderintown

答えて

2

はい、func1をfunc2の中に書くことをお勧めします。 HTML:

<a id="id101" href="#" >Link</a> 

jQueryの

$("#id101").click(func2() { 
    var status = false; 
    //func2 goes here and modifies status value. 
    if (status) { 
     // func1 goes here 
    } else { 
     // in case if status is false. 
    } 

}); 

また、私はあなたがより具体的に説明してください可能性があり、あなたがあなたの質問の後半部分には何を意味するか取得できませんでした。

+2

「#」をjQueryセレクタに追加しないと、何も動作しません。 – Josh

+0

事実、理論的にイベントとハンドラには制限はありません。それらのハンドラを作成するだけです。私はあなたがidsの代わりにクラスを使うことができると思います。 JavaScriptのハンドラが必要なリンクがたくさんある場合は、それらを集めてみてください。 'Link Link 2 'のような質問をする場合は、クリックしたリンクを識別する別の属性を使用することをお勧めします。 – Cyberon

2

これは "臭い"コードだと言えますが、このような場所にはあなたのJavaScriptが欲しいとは限りません。いくつかのjQueryの基礎を学び、そこから移っていくことをお勧めします。私はそれがイライラすることができます、特にあなたがレガシーのJavaScriptで作業している場合は知っています。

+0

私は現時点でjQueryを学んでいます。ありがとう – newcoderintown

9

私が正しく理解していれば、インラインJavascriptを避けたいですが、aを見ることができ、イベントがバインドされているかどうかを知りたいこともあります。残念ながら、インラインJavaScriptは悪いニュースであるため、これを示すには許容可能な方法はありません。おそらく、要素に将来の可読性を助けるためのダミークラスを与えるだけかもしれません。それ以外は、func1func2のことを忘れてしまいます。クリックバインディングの中で無名関数を使用するだけです。

<a id="some_id" class="optional_has_click">Click Me</a> 

<script type="text/javascript"> 
    $(document).ready(function(){ 

    $("#some_id").click(function(){ 

     // do something 
     alert($(this).attr("id")); 

    }); 

    }); 
</script> 

EDIT:あなたはそれがaのように見えるようにあなたのダミークラスを使用できるようにまた、hrefを削除すると、視覚的なキューを削除します。ここで

はあなたのためのフィドルです:http://jsfiddle.net/zzTSt/1/

+0

はい、私はインラインJSを避けたいですが、 'a'に関連するイベントも見ています。このfunc1とfunc2を多くの場所で使用する必要がある場合、匿名関数でこれを行うことはできますか? – newcoderintown

+0

@endroix:ちょうど私が警告している匿名のものの中の関数を呼び出してください。 – Josh

+0

@endroix:私はあなたのためにフィドルを更新しました。 – Josh

関連する問題