1

JQuery blur() メソッドを使用して「select」要素のオプションから値を取得していますが、何らかの理由で、選択した selectedIndex ではなく、常に selectedIndex = 0 の値を取得しています。

--> JSFiddle <-- なんらかの理由で、最初の行 (長さ) は正常に機能しますが、他の行はどれも機能しません。

任意のテキスト ボックスに数値を入力し (最初の「長さ」を除く)、隣接する選択ボックスから項目を選択し、選択ボックスから離れた場所をクリックします。

コードがすべての SELECT 要素で常に option=0 の値を選択していることがわかります。また、「data-hid」プロパティを数値として認識できません (textbox 要素の html を参照)。

誰か助けてくれませんか?私はこれで1日立ち往生しています。

** また、何らかの理由で、これは JQuery 1.7.2 でのみ機能し、1.9 リリースでは機能しません (「option:selected」コードが好きではありません。そのスニペットが最新のリリースにどのように準拠できるか知っている人はいますか?

$('select').blur(function() {

//Get the value of the option chosen
var unit = $(this + 'option:selected').val();

//If the selectedIndex is 0 then focus on the select and make the user chose a unit.
  if ($(this).prop('selectedIndex') == 0) {
      $(this).focus();
    return;
} else {


//Remove the 'd' in front of the 'select' element ID and you will have the ID of the   textbox
        var txt = "#" + $(this).attr("id").substr(1);

//Get the numerical value of the textbox
        var mval = parseFloat($(txt).val());

            if ($(txt).attr('data-hid') == "OFF") {
                var hid = mval / unit;
                $(txt).attr('data-hid', hid);
                 alert("hid = " + hid + "\nmval = " + mval + "\nunit = " + unit);
            }
            else 
            {
                var hid = $(txt).attr('data-hid');
                var newtxt = hid * unit;
                $(txt).val(newtxt);
            }
}
main();
});
4

3 に答える 3

2

$(this).val()選択項目の選択された値を与えるだけを使用しないのはなぜですか? 特に最初にオプション要素を取得する必要はありません。

http://api.jquery.com/val/

ドキュメントにもそう書かれています。

于 2013-03-01T14:54:30.157 に答える
1

この行は間違っています:

//Get the value of the option chosen
var unit = $(this + 'option:selected').val();

次のようにする必要があります。

var unit = $(':selected', this).val();

理由を理解するには (jQuery のドキュメントを参照する以外に)、blur関数のすぐ下で次の行を試してください。

console.log(this + 'option:selected'); //outputs something like [object HTMLSelectElement]option:selected

次のようなことができます:

console.log('#' + $(this).attr('id') + ' option:selected'); //outputs something like #mySelectBox option:selected

しかし、今は少しばかげています:D ...しかし、少なくともjQueryセレクターがどのように機能するかを理解するのに役立つかもしれません= 0]

Torstenの答えは、これを行うための本当に正しい方法です

于 2013-03-01T14:56:55.407 に答える
1

選択の値、つまり選択されたオプションの値を取得する場合、正しい方法は次のとおりです。

$(this).val(); // Inside the .blur "this" points to your select

次に、選択したインデックスが 0 であるかどうかを確認する代わりに、値が空であるかどうかを確認できます。

また、フィドルhtmlでは最初のオプションが「選択」されています。最初のオプションをデフォルトとして動作させるためにそのキーワードを入力する必要はありません。何も選択されていない場合、最初のオプションが選択されます。

さらに、このイベントをぼかしでトリガーしてもよろしいですか? 変更しないでください。目的に合わせて変更してください。あなたの説明から、「ワークフロー」は、入力に数字を入力し、選択でユニットを選択することです。ユーザーが値を選択するとすぐにトリガーを変更し、ぼかしは選択フィールドがフォーカスを失った場合にのみトリガーします。

于 2013-03-01T14:59:39.273 に答える