1

動的に作成されたドロップダウン メニュー オプションを無効にしようとしています (他のメニュー オプションとのユーザーの対話に応じて)。「null」はオブジェクトではないというエラーが発生します。

このコード行:

if (document.getElementById(DropDownNames[j]+x).value = openerVals) {

構文エラーがあると思いますが、まだ Javascript に慣れていないため、完全にはわかりません。

コード全体は次のとおりです。

var OpeningEmployees = document.getElementById('opener');
var QuantityDDOptions = ('#opener option').length;

var openerVals = eodForm.elements["opener"].value;

var DropDownNames = new Array();
DropDownNames[0] = "ui-multiselect-opener-option-";
DropDownNames[1] = "ui-multiselect-mid-option-";
DropDownNames[2] = "ui-multiselect-closer-option-";
DropDownNames[3] = "ui-multiselect-SR-option-";
DropDownNames[4] = "ui-multiselect-CR-option-";
DropDownNames[5] = "ui-multiselect-A-option-";
DropDownNames[6] = "ui-multiselect-BD-option-";
DropDownNames[7] = "ui-multiselect-Fridge-option-";
DropDownNames[8] = "ui-multiselect-AO-option-";
DropDownNames[9] = "ui-multiselect-EPV-option-";



OpeningEmployees.onchange = function () {
    for (var j = 0; j <= DropDownNames.length; j++){
        for (var x = 0; x <= QuantityDDOptions; x++) {
        if (document.getElementById(DropDownNames[j]+x).value = openerVals) {
            document.getElementById("'"+DropDownNames[j]+x+"'").setAttribute("disabled","disabled");

ご協力ありがとうございました。私はあなたの投稿から変更を加えましたが、ブラウザー コンソールでまだエラーが発生しています。ドロップダウン名の末尾の数字は動的であることに注意してください。ユーザーがデータベースに追加されると、ドロップダウン メニューに追加されるので、QuantityDDOptions をオプションの数と同じに設定します。オプションは 0 から始まります。

更新されたコードは次のとおりです。

var OpeningEmployees = document.getElementById('opener');
var QuantityDDOptions = ('#opener option').length;

var openerVals = eodForm.elements["opener"].value;

var DropDownNames = new Array();
DropDownNames[0] = "ui-multiselect-opener-option-";
DropDownNames[1] = "ui-multiselect-mid-option-";
DropDownNames[2] = "ui-multiselect-closer-option-";
DropDownNames[3] = "ui-multiselect-SR-option-";
DropDownNames[4] = "ui-multiselect-CR-option-";
DropDownNames[5] = "ui-multiselect-A-option-";
DropDownNames[6] = "ui-multiselect-BD-option-";
DropDownNames[7] = "ui-multiselect-Fridge-option-";
DropDownNames[8] = "ui-multiselect-AO-option-";
DropDownNames[9] = "ui-multiselect-EPV-option-";



OpeningEmployees.onchange = function () {
    for (var j = 0; j < DropDownNames.length; j++){
        for (var x = 0; x < QuantityDDOptions; x++) {
            if (document.getElementById(DropDownNames[j]+x).value == openerVals) {
                document.getElementById(DropDownNames[j]+x).setAttribute("disabled","disabled");
4

3 に答える 3

4
document.getElementById(DropDownNames[j]+x).value = openerVals

する必要があります

document.getElementById(DropDownNames[j]+x).value == openerVals

シングル=は別のものと等しいものを設定します(そして設定値を返します)。これを使用するため、ifステートメントで使用される結果は設定値の真偽です。

==型強制を使用して、2 つのものが互いに等しいかどうかを評価するために使用されます。(2 =="2" が真)

===型強制なしで、2 つのものが互いに等しいかどうかを評価するために使用されます。(2 !=="2" が真)

于 2013-03-21T15:52:39.530 に答える
1

if ステートメントは==の代わりに使用する必要があり=ます。次の行では、id を引用符で囲む必要はありません。もう文字列です。

エラーが発生する理由は、

for (var j = 0; j < DropDownNames.length; j++){

を使用する<=と、存在しない配列要素 (DropDownNames[10]) にアクセスしようとするため、document.getElementById何も返されません。これは、 の場合にも当てはまりxます。

于 2013-03-21T15:56:51.633 に答える
0

if ステートメントは、比較 (==) の代わりに代入 (=) を使用しています

一部の人々は、JavaScript での比較に === を使用するとさえ言うでしょう。

于 2013-03-21T15:54:51.287 に答える