2016-10-04 9 views
0

私はモデルからその値を取得し、最初に値が設定されるドロップダウンを持っています。そのドロップダウンをクリックすると、AJAXを使用して他の値が設定されます。ドロップダウンに値を設定できますが、ドロップダウンからオプションを選択すると、ドロップダウンの最初の値にリセットされます。私が欲しいのは、ドロップダウンをクリックした後、通常のドロップダウンのように機能させることです。どのように私はそれの条件を置くのですか?ドロップダウンの値が保持されていません

これは、最初に定義された値とドロップダウン値を設定するためのコードである「field.Value」

ddlValue = "<option value="+field.Value+ " selected='selected'>" + field.Value+"</option>"; 

<td><select id='@String.Format("selValue{0}", field.Field)' class='ddlValue'>@Html.Raw(ddlValue)</select></td> 

そして、これは、それを移入AJAX関数です。

$('body').on('click', '.ddlValue', function() { 
    var target = event.target.id; 
    var rowId = $('#' + target).closest("tr").prop("id"); 
    var field = $('#' + rowId).find(".fieldvalue").html(); 

     $.ajax({ 
      cache: false, 
      url: '@Url.Action("PopulateDropdown", "AdvancedSearch")', 
      type: "POST", 
      data: { Field: field } 
     }).done(function (data) { 

      var listb = $('#' + target); 
      listb.empty(); 

      $.each(data.value, function (index, value) { 
       listb.append($('<option>', { 
        value: value, 
        text: value 
       }, '<option/>')) 
      }); 

     }); 

}); 
+0

を追加することを、あなたは自分自身を移入するためのドロップダウンを取得しようとしていますか? – FailedUnitTest

+0

@FailedUnitTestドロップダウンには1つの値しか設定されません。誰かがドロップダウンをクリックすると、私はクリック機能を使って残りの部分を設定しています。 – TheFallenOne

+0

提供されたコードでは、記述された動作は妥当と思われました。ドロップダウンをクリックするたびに、クリックされたドロップダウンが空になり、再投入されます。それはあなたが望むものではありませんか? – tpdietz

答えて

1

ajax集団が1回だけ発生するようにするには、イベントリスナーが発生した後に削除する必要があります。そのような何か:

$('.ddlValue').on('click', function() { 

    $(this).off('click'); //This removes the event after it has happened once. 

    var target = event.target.id; 
    var rowId = $('#' + target).closest("tr").prop("id"); 
    var field = $('#' + rowId).find(".fieldvalue").html(); 

    $.ajax({ 
     cache: false, 
     url: '@Url.Action("PopulateDropdown", "AdvancedSearch")', 
     type: "POST", 
     data: { Field: field } 
    }).done(function (data) { 

     var listb = $('#' + target); 
     listb.empty(); 

     $.each(data.value, function (index, value) { 
      listb.append($('<option>', { 
       value: value, 
       text: value 
      }, '<option/>')) 
     }); 

    }); 

}); 

注意してください、フォローはしますない作品:

$('body').on('click', '.ddlValue', function() { 
    $(this).off('click'); 
    ... 
0

これは、これを行うの愚かな方法のように思えます。あなたは、ユーザーとのやりとりをしなくても、同じ操作をローンで行うことができます。

あなたのソリューションを修正するといわれていることは、単にグローバル変数

$first = true 
$('body').on('click', '.ddlValue', function() { 
    if($first) { 
     $first = false 
     var target = event.target.id; 
     var rowId = $('#' + target).closest("tr").prop("id"); 
     var field = $('#' + rowId).find(".fieldvalue").html(); 
     $.ajax({ 
     cache: false, 
     url: '@Url.Action("PopulateDropdown", "AdvancedSearch")', 
     type: "POST", 
     data: { Field: field } 
     }).done(function (data) { 
     var listb = $('#' + target); 
     listb.empty(); 
     $.each(data.value, function (index, value) { 
     listb.append($('<option>', { 
      value: value, 
      text: value 
     }, '<option/>')) 
     }); 
    } 
    }); 
}); 
+0

ブール値フラグが古くなるので、$( 'ddlValue')に一致する要素がいくつかある場合、このタイプのソリューションは複雑になると思います。 – tpdietz

+0

私は同じコメントをしています。 ddlValueクラスのフィールドが複数ある場合は機能しません。 – TheFallenOne

+0

"私はモデルからその値を取得し、最初に入力されたドロップダウンを持っています。そのドロップダウンをクリックすると、そのIDに切り替えます。 – jacksonecac

関連する問題