2012-02-08 5 views
3

ドロップダウンの値を選択するためにJqueryを使用しています。
OnChangeイベント(.jqueryでは.change)が必要ですが、ドロップダウンに1つのオプションしかない場合は、onChangeイベントで取り込むことができません。
私のドロップダウンは動的に形成されるので、いくつのオプションがいくつあるか分かりませんが、オプションが1つだけあれば問題に直面しています。
1つだけOnChangeイベントをキャプチャする方法はありますか?ドロップダウンに値が1つしかない場合、HTMLドロップダウンはonChange()をキャプチャできません

+2

インターフェイスデザインの欠陥があります。ドロップダウンに1つしか選択できない場合は、ドロップダウンがジョブの誤った制御になります。 –

+0

@Joel - これは正しいアプローチであるケースはあります。例:「Select Planet」と「Select Moon」。そうすれば、2つ目のドロップダウンが0〜63の間で変化することがあります(Cruithneを数える場合を除いて、地球には1つのオプションしかありません)。 – Niklas

+0

@JoelEtherton、ドロップダウンは動的に形成されます。 – Debugger

答えて

0

要素の内部状態が変更されたときにonchangeイベントが発生します。一意の値を持つドロップダウンがあるので、その状態は決して変更されないので、イベントは発生しません。

+0

ドロップダウンは動的に形成されますが、要素を含む選択に対してはまだ機能している必要があります。 – Debugger

+0

あなたは1つの要素だけでそれらのドロップダウンのブラーイベントハンドラを追加したり、null値を追加して "要素を選択"してユーザーが実際にドロップダウンの値を変更できるようにすることができます – elmasse

0
<label for="checkboxThatUsedToBeASelect"> 
    <input type="checkbox" id="checkboxThatUsedToBeASelect" name="checkboxThatUsedToBeASelect" value="something" /> 
</label> 

$('#checkboxThatUsedToBeASelect').change(function(){ 

}); 

これで、ユーザーフレンドリーな入力が得られました。このチェックボックスをオンまたはオフにすると、変更がトリガーされます。 :D

+0

ドロップダウンは動的に形成されますが、私は要素を含む選択のために行った – Debugger

+0

私は10個以下の項目の選択にラジオのセット/チェックボックスを使用することを大いに支持しています。使用するのがずっと簡単です。 – MetalFrog

-2

.change別の収容所を探して場所を切り替える。あなたのケースでは悲しいことに、家庭だけのケースがあり、イベントは発砲していません。

+1

私はコメントを好きです、私は今赤ちゃんの一日をする必要があるようにloks ... ;-) – Debugger

+0

私は下の票を受け取ったか?怒っている鳥がいるかもしれません.... – Premanshu

0

条件付きイベントバインダーについてはどうですか?次のようなもの:

var changeHandler = function (method) { 
    alert(method); 
}; 
if ($('select option').length > 1) { 
    $('select').change(function() { 
     changeHandler('change'); 
    }); 
} else { 
    $('select').click(function() { 
     changeHandler('click'); 
    }); 
} 
+0

値を得るのに問題はありませんが、私はonChangeを操作する必要があります。 – Debugger

+0

'onchange'イベントで何をする必要がありますか? – pete

+0

ajaxを渡してビューを読み込みます。これはすべてドロップダウンのonchangeに依存します... – Debugger

1

あなたはonchangeイベントをする必要はありません。 onchangeから呼び出される関数を持っていて、アイテムが1つしかない場合は、その関数を呼び出してください。

function populate() { 
    //do work to populate #selector 

    if($("#selector option").length == 1) { 
     $("#selector").hide(); 
     workerFunction(); 
    } else { 
     $("#selector").show(); 
    } 

    $("#selector").change(workerFunction); 

    //the following line of code will work like a default: 
    workerFunction(); 
} 

function workerFunction() { 
    //put whatever used to be in your onChange function here 
} 
+0

私はこの答えが好きですが、少し短くすることもできます - '$("#selector ")change(workerFunction);' – shanabus

+0

@shanabus良い点、私はその編集をしました。 – Jordan

+0

ええ、私は答えが好きです。しかし、選択肢に10のオプションがあるときには問題があります。最初はデフォルトのもので、最初のオプションのアクションにアクションが必要です。なぜ私は自動尋問や何かを考えていました。 – Debugger

関連する問題