2015-10-21 76 views
0

這是一個腳本,它動態生成文本框和下拉列表。檢查'輸入'和'選擇'jQuery

var ss = $('#ss'); 
$('#SubGrpId').change(function() { 
    $('#ss').empty(); 
    $.ajax({ 
     url: '@Url.Action("FillItem", "Item")', // dont hard code your url's 
     type: "GET", 
     dataType: "JSON", 
     data: { MnId: $('#MainGrpId').val(), SbId: $(this).val() }, // pass the selected value 
     success: function (y) { 
      alert("Im in"); 
      $.each(y, function (l, u) { 
       // add the label 
       var label = u.Name; 
       var name = 'Field' + l; 
       var label = $('<label></label>').text(label).attr('for', name); 
       ss.append(label); 
       if (u.Options.length==0) { 
        // There is only one item and its for generating a textbox 
         var input = $('<input>').attr({ type: 'text', id: name, name: name }); 
        ss.append(input); 
       } else { 
        // Its a select 
        var select = $('<select></select>').attr({ id: name, name: name }); 
        // add each option 
        $.each(u.Options, function (i, option) { 
         select.append($('<option></option>').val(option.Value).text(option.Text)); 
        }) 
        ss.append(select); 
       } 
      }); 
      var labelAdd = $("<label id='lblId'>").text('Refresh'); 
      ss.append(labelAdd); 
     }, 
     error: function() { 
      alert("something wrong"); 
     } 
    }); 
}); 

查看簡要

@using (@Html.BeginForm("Save", "Item")) 
{ 
    <div id="ss" class="col-md-6"> 

    </div> 

    @Html.TextBoxFor(a=>a.ItemName, new { Class = "form-control", placeholder = " Item Name", TextMode = "MultiLine2", onkeyup = "return validateChar(this)", style = "width:175px;height:25px;" }) 

    <input type="submit" value="Save" class="btn btn-success" /> 
} 

現在我想在texboxes文字和的DDL爲「ITEMNAME」文本框,以空格分隔的所選項目的文本。當用戶開始輸入文本框時,文本應該開始綁定到「ItemName」文本框。如果用戶從ddl中選擇一個項目,我們假設「itemThree」,那麼該文本應該被添加到文本框的空格中。這就是我所做的。

$('#ss').on(function() { 
    if ($('#Field0').is('input')) { 
     var f1 = $('#Field0').val(); 
    } 
    else { 
     var f1 = $('#Field0 option:selected').text(); 
    } 

    if ($('#Field1').is('input')) { 
     var f2 = $('#Field1').val(); 
    } 
    else { 
     var f2 = $('#Field1 option:selected').text(); 
    } 
    .... 
     $('#ItemName').val(f1 +" "+ f2 +" "+ f3....); 

}); 

但是這個腳本不起作用。這不會將文本框的文本和ddls的選定項目文本綁定到「ItemName」文本框。 我以這種方式運行上面的腳本,因爲作爲示例id('Field1')可以是文本框或ddl。 所以我檢查了兩種情況。任何人都可以幫我解決這個問題。謝謝!!

+2

你的問題非常難走,你可以重新詞組您的問題? – DelightedD0D

+0

@ DelightedD0D,好的。第一個腳本對此沒有太多必要。考慮最後的腳本。有動態生成的文本框和DDL。它們的順序不相關。如果用戶開始將文本輸入到文本框中它應該開始顯示在「ItemName」文本框中。如果用戶從ddl中選擇一個項目,那麼與該項目相關的文本應該顯示在文本框中。現在它就像這樣「textboxtext ddlitemone ....」 – Isuru

+0

你可以使用**生成的HTML **製作一個jsFiddle嗎? – DelightedD0D

回答

1

您遇到的主要問題是將事件處理程序綁定到文本框中的更改或下拉列表中的更改(select)。

這裏就是你需要做的:

1.首先,在動態創建的文本框和下拉控件添加一個類名如下(唯一的變化是增加了類屬性的,這是用於在buildValues功能選擇)

var input = $('<input>').attr({ type: 'text', id: name, name: name, class:"field" }); 
var select = $('<select></select>').attr({ id: name, name: name, class:"field" }); 

2.Next,你附加的一切給SS剛過,你需要添加事件處理程序如下,其中buildValues是事件處理程序。

var labelAdd = $("<label id='lblId'>").text('Refresh'); 
ss.append(labelAdd); 
$(".field").on("change", buildValues); 

3.最後,這裏的事件處理程序,將建立的值按您的要求:

function buildValues(){ 
var txtValues = []; 
$("input.field").each(function(){ 
txtValues.push($(this).val()); 
}); 
$("select.field").each(function(){ 
txtValues.push($(this).find("option:selected").text()); 
}); 

$("#ItemName").val(txtValues.join(" ")); 
} 
+0

謝謝你的明確解決方案:)對於遲到的回覆抱歉(由於電源故障)。這與ddls正常工作。但對於文本框,它只適用於第一個文本框。其他文本框中的文本不會綁定「ItemName」文本框。有什麼我必須做額外的?請幫助 – Isuru

+0

好消息。懇求你能接受這個答案,謝謝。 – Don

+0

是的,我確定要去。但是,你能幫我讓這個腳本正確工作嗎? – Isuru