2011-12-27 11 views
0

私は、次の選択リストがあります。ユーザーは、私が選択を含まないもので、上記のリストを置き換えます次のことを実行する必要がある新しい選択を行うjQueryを使用して、リスト項目が存在するかどうかを確認できますか?

<select id="AccountID"> 
    <option value='0000'>Select Account</option> 
    <option value='002M'>test1</option> 
    <option value='002N'>test2</option> 
    <option value='002P'>test3</option> 
</select> 

を「アカウントを選択します」
function SelectAccounts() { 
    $.ajax({ 
     url: "/Administration/Accounts/GetOptions", 
     data: { ds: $('#DataSourceID').val(), 
      ac: '0000' 
     }, 
     success: function (data) { 
      $('#AccountID').html(data); 
     } 
    }); 
} 

は、私が変えることができる方法はあります:

$('#AccountID').change(SelectAccounts); 

オプションがある場合は、それが唯一のSelectAccountsを呼び出すように「0000」に選択リスト?

+0

同じリスト内のアイテムを選択したユーザーに応答して、リストを変更するのはなぜですか?彼らの選択がすぐに消えてしまうので、少し混乱させるのではないですか? – nnnnnn

答えて

3

確かに、単に無名関数を使用します。

$('#AccountID').change(function() { 
    if ($(this).find('option[value="0000"]').length > 0) { 
    SelectAccounts(); 
    } else { 
    // Option not present 
    } 
); 

またはセレクター:

$(document).on('change', '#AccountID:has(option[value="0000"])', SelectAccounts); 
// Use a more specific selector for the parent of `#AccountID`. 
+0

そのセレクタは、その時点でオプションが存在するかどうかによって変更ハンドラを設定するかどうかを設定します。オプションが削除されると、ハンドラが将来実行されることを防ぎません。 – nnnnnn

+0

'.on()'も '.live()'として機能すると思います。 – Blender

+0

ちょっと微妙な調整があります:http://jsfiddle.net/EhVAg/1/ – Blender

1

確かに、あなただけ頼む:

if(!!$("#AccountID option[value=0000]").length)) { 
    // code 
} 
2

を一般的な意味では、あなたがテストすることができますselect要素に次のような特別なオプションがある場合:

if ($("#AccountID option[value='0000']").length > 0) { 
    // option exists 
} 

しかし、あなただけの変更ハンドラを削除したほうが良いかもしれません:

// within the success handler of your ajax call: 

$("#AccountID").html(data).off("change"); 

それとも、jQueryの古いバージョンを使用している場合、.unbind("change")を使用しています。

+0

私は '.off()'メソッドについてはあまりよく分かりません。 OPがオプションリスト*を一度変更したかったという前提に基づいていましたか? – moey

+1

@ Siku-Siku.Com - 彼女は多くの情報を提供していませんでしたが、現在表示されているコードは変更の唯一のことを行い、それは 'SelectAccounts()'関数を呼び出します。彼女は、オプションリストがリロードされた後、彼女がそれをしたくないと言ったので、ハンドラを削除することは不合理ではないようです。 (なぜあなたはオプションリストが選択されるとすぐにオプションリストを置き換えるのですか?とにかく私はあなたの外にありますが)私は最初に条件テストを行う方法を示していますので... – nnnnnn

+0

それは意味があります+1)。私は '.off()'を間違って理解していたと思った。それが私が尋ねた理由です。ありがとう! – moey

1

あなたが試すことができます。

$('#AccountID').change(function() { 
    if ($(this).find('option[value="0000"]').length > 0) { 
    SelectAccounts(); 
    } 
}); 

を興味があるだけ、あなたは本当にAJAXを使用してオプションを変更する必要がありますか?彼らがかなりシンプルなのであれば、事前に準備しておくのがいいでしょうか?

関連する問題