2011-06-20 1 views
0

私は登録フォームをATMにしていますので、JavaScriptのコードをリアルタイムでチェックするために余分なJavaScriptコードを除いて今のようにしたいと思います。(onmouseover、onmouseout、 onblurなど)。
小さなサンプル:指定された要素(最初のパラメータ)の値が第2のパラメータ(デフォルト値)に一致するか第三のパラメータよりも短い場合javascriptのトリガー機能はスクリプトからのイベントではなく、明示的にhtmlから

<tr> 
    <td> 
     <label for="name" 
       onmouseover="fieldSelected('name', '', 3);" 
       onmouseout="checkValue('name', '', 3);"> 
      Enter your name: 
     </label> 
    </td> 
    <td> 
     <input type="text" 
       id="name" 
       name="name" 
       onmouseover="fieldSelected('name', '', 3);" 
       onmouseout="checkValue('name', '', 3);" 
       onblur="checkValue('name', '', 3);"> 
    </td> 
</tr> 

fieldSelectedフィールドの背景が黄色になります。
ラベルまたは入力フィールドをマウスオーバーすると、最初にbgが黄色に変更され、次に赤色に変更されます(何も入力していないため)。
checkValueは、値に応じてフィールドの背景を赤または緑に変更します(同じパラメータ)。
入力フィールドに何かを入力し、別のフィールドに切り替えて背景色を変更します。

ここで気づくように、すぐにたくさんのJavaScript関数呼び出しがあります(入力/選択フィールドごとに5つ)。もし誰かがこれらのイベントトリガーを別の場所(通常はこれをコードしないのですが)に貼り付ける方法を知っているなら、このような形式ではなく、一度に複数のIDに直接接続するのがよいでしょう。私はここでjQueryを持っていますが、私は実際にはJavaScriptの専門家ではありません。

これを行う簡単な方法がありますか?インタラクティブ性を最大限に高めるために、すべてのイベントでフィールドの背景色を変更したいと考えています。確かに、すべてのデータがサーバー側に送られるときはそれほど大したことではありませんが、私はそのようにしたいだけです。あなたはインライン展開と離れて行うことができる。例えば

答えて

1

、:

function over(ev) { 
    var _for = $(ev.target).closest('tr').find('label').attr('for'); 
    fieldSelected(_for, '', 3) 
}; 

function out(ev) { 
    var _for = $(ev.target).closest('tr').find('label').attr('for'); 
    checkValue(_for, '', 3) 
}; 

$('table').live('hover', over, out).blur(out); 

NB:これは、すべての入力要素とそれに関連するラベルがの表の行にあることを前提としてい彼ら自身。

http://jsfiddle.net/alnitak/XdzeX/

私はあなたがすることはできませんhttp://jsfiddle.net/alnitak/T6vvN/

function handler(ev) { 
    // check which field (or label) is being hovered over 
    if (ev.target.tagName === 'LABEL') { 
     var _for = $(ev.target).attr('for'); 
    } else { 
     var _for = ev.target.name; 
    } 

    // do event type checking to decide which function to call 
    if (ev.type === 'mouseout' || ev.type === 'blur') { 
     checkValue(_for, '', 3); 
    } else if (ev.type === 'mouseover') { 
     fieldSelected(_for, '', 3); 
    }   
}; 

$('label, input').live('hover blur', handler); 
+0

何とかうまくいきません... http://jsfiddle.net/XdzeX/6/ 本当にいいウェブサイトです:) – jurchiks

+0

それは_mostly_動いています(rev#7を参照) - あなたは2つの関数で間違ったパラメータ名を持っていました。私はまだ赤は見ていない。 – Alnitak

+0

これはfiddleで動作します。http://jsfiddle.net/T6vvN/8/ 実際のサイトで何が起こるかを確認します。 – jurchiks

0

var input_element = document.getElementById('name'); 

input_element.onmouseover = function(){ 
     fieldSelected('name', '', 3); 
}; 

input_element.onmouseout = function(){ 
     checkValue('name', '', 3); 
}; 
//etcetera 

そして、あなたは

+0

でテーブルレイアウトについての仮定を行うものではありません少し長いバージョンを作成した - それは 'すぐに(...)fieldSelected'を評価しないだろうコールバックに(ダフ)結果を代入してください! – Alnitak

+0

@Alnitak!ああ本当、1秒 – Neal

+0

@Alnitak - 私はそれを – Neal

0

コンテナにイベントハンドラをアタッチし、図にeventオブジェクトを使用するのと同じ方法で、他の要素を割り当てることができますそれはそれが由来するものを入力します。

http://developer.yahoo.com/performance/rules.html#events

+0

残念ながら、それは私にとってはあまりにも少ない情報です...どのようにイベントハンドラをDIVに添付し、どのイベントがトリガされ、どの入力/ラベルフィールドを知っていますか? – jurchiks

+0

[http://jsfiddle.net/Bxx6C/](http://jsfiddle.net/Bxx6C/) – Will

+0

はフィドルの単一フィールドで動作しますが、次のようになります。div> form> table> tr> td> table> tr > td label + tdの入力と反応なし...もしそれがうまくいけば私は好きだったでしょう。 – jurchiks

1

あなたはより多くの詳細については、フォーム

document.getElementById('name').addEventListener('mouseover',function(){ fieldSelected('name','',3)},false); 

グーグルのaddEventListener上の個々のフィールドにイベントを追加する機能 "にaddEventListener" を使用することができます。

あなたのページ全体のイベントのポイント登録がなることができた時に、私は強くjQueryのを使用してお勧めしたい
関連する問題