2011-12-30 17 views
4

を実行していない:Javascriptが私はいくつかの簡単なJavaScriptの機能を持っているのonclickイベント

function focus(id) 
{ 
    var e = document.getElementById(id); 
    if (e != null) 
    { 
     e.focus(); 
    } 
} 

function show(id) 
{ 
    var e = document.getElementById(id); 
    if (e != null) 
    { 
     e.style.display = "inline"; 
    } 
} 

私は、その後のonclickイベントにhtmlタグを持っています。

<a title="Click This" onclick="focus('some_textbox'); show('some_panel');">Click This</a> 

「クリックする」リンクをクリックすると、show()メソッドだけが実行されます。何らかの理由でフォーカスメソッドが呼び出されることはありません。これがなぜ起こっているのか?

私はキャッシュをクリアしようとしましたが、focus()メソッドとshow()メソッドの順序を逆にしました。また、すべてが正しく綴られていることを確認しました。

focus()は既にjavascript内の関数なので、それはありますか?

編集:私はfocus2に関数の名前を変更しようとしましたが、今はうまくいくようです。非常に奇妙な。誰がなぜこのようなことが起こるのかについての洞察はありますか?

+1

に、HREFにfocusへの呼び出しを更新することを忘れないでください、' focus'も同様で、多分あなたが効果を見ることができない、多分それは、あなたが定義した関数ではありませんそれが実行されます。 –

+0

関数 'focus'の名前を変更しようとしたら、それが動作するかどうか確認してください。 –

+0

@FelixKling:実行されません。私の投稿を完全に無視してくれてありがとう。 – Mark

答えて

0

ここで名前変更の問題があるようです。

関数の名前をfocusからfocusXに変更するだけで、これは私のテストケースではうまくいきます。

がshow`が実行された `場合focusX

+0

タイマーの期限が切れたときに正しいとマークします。新しい名前のためのアイデア。強調、スナップカーソル?私は良いものを考えることができません。 – Mark

+0

@マークFocusElementはどんなに良いです:) –

3

それはおそらく「フォーカス」メソッドを呼び出すですが、何が起こっていることは<a>タグのデフォルトのアクションは、それをバック盗むされていることです。このお試しください:別のイベントループで「フォーカス」への呼び出しを実行することにより

function focus(id) 
{ 
    var e = document.getElementById(id); 
    if (e != null) 
    { 
     setTimeout(function() { e.focus(); }, 1); 
    } 
} 

を、あなたは「クリック」の取り扱いが行われた後、あなたの要素がフォーカスをつかむことを確認することができます。

関連する問題