locked
webservice for select2 RRS feed

  • Question

  • User-590375999 posted

    Hi

    i need to implement dropdown infinite loop, but no idea how the asp.net web service looks like for select2 infinite loop, i need to implement search dropdown also.

    Friday, May 29, 2020 12:07 PM

Answers

  • User-939850651 posted

    Hi, sivapooja

    I modify my code to implement the search feature, and I'm not sure this is what you expect.

    More details, please refer below code:

    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="Scripts/jquery-3.4.1.js" type="text/javascript"></script>
        <script type="text/javascript">
            function getOption() {
                $.ajax({
                    url: "DDLService.asmx/getOption",
                    type: "POST",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        var jsonArr = $.parseJSON(data.d);
                        $.each(jsonArr, function (index, value) {
                            $("#TestSelect").append($('<option/>').val(value.item).text(value.item));
                        })
                    },
                    error: function () {
                        alert("there is something worng!")
                    }
                });
            }
            $(document).ready(function () {
                getOption();
            });
            
            document.addEventListener("keyup", function (e) {
                var textList = [];
                if (e.target.id === "searchBox") {
                    //clear select status
                    $('#TestSelect').find("option:selected").removeAttr("selected");
                    //get options
                    $('#TestSelect option').each(function () {
                        textList.push($(this).text());
                    });
                    for (var i = 0; i < textList.length; i++) {
                        var text = e.target.value; 
                        var lowerText = text.toLowerCase();
                        var lowerOptionText = textList[i].toLowerCase();
                        //you can also change the matching rules
                        var regex = new RegExp("^" + lowerText, "i");
                        var result = regex.test(lowerOptionText);
                        if (result) {
                            $("#TestSelect option[value='" + textList[i] + "']").attr("selected", "selected");
                            return false; 
                        }
                    }
                }
            });
    
            function myFunction() {
                var sh = $("#TestSelect")[0].scrollHeight;
                var ch = $("#TestSelect")[0].clientHeight;
                var st = $("#TestSelect")[0].scrollTop;
                if (ch + st == sh) {
                    getOption();
                }
            }
        </script>
    </head>
    <body>
        <div>
            <input type="search" width="200" id="searchBox"><br />
            <select id="TestSelect" size="5" style='width: 200px;' onscroll="myFunction()">
            </select>
        </div>
    </body>
    

    Result:

    If there is any other questions, please feel free to let me know.

    Best regards,

    Xudong Peng

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, June 4, 2020 8:11 AM

All replies

  • User-2054057000 posted

    Hi

    i need to implement dropdown infinite loop, but no idea how the asp.net web service looks like for select2 infinite loop, i need to implement search dropdown also.

    Kindly refer some tutorials on select2 jQuery plugin one such is - How to use Select2 jQuery plugin

    Sunday, May 31, 2020 2:58 PM
  • User-939850651 posted

    Hi, sivapooja

    According to your description, are you trying to implement infinite loop in dropdownlist, and get data from web service?

    I created a demo, you could refer to below code:

    DDLService.asmx
      [System.Web.Script.Services.ScriptService]
        public class DDLService : System.Web.Services.WebService
        {
            [WebMethod]
            public String getOption() {
                DataTable dt = new DataTable();
                String conStr = "data source=.; database=TestDB; integrated security=SSPI";
                using (SqlConnection conn = new SqlConnection(conStr)) {
                    String query = "select * from Test_tb";
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(query, conn)) {
                        SqlDataAdapter sda = new SqlDataAdapter(cmd);
                        sda.Fill(dt);
                        JavaScriptSerializer serializer = new JavaScriptSerializer();
                        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                        Dictionary<string, object> row;
                        foreach (DataRow dr in dt.Rows)
                        {
                            row = new Dictionary<string, object>();
                            foreach (DataColumn col in dt.Columns)
                            {
                                row.Add(col.ColumnName, dr[col]);
                            }
                            rows.Add(row);
                        }
                        return serializer.Serialize(rows);
                    }
                }
            }
        }
    
    DDLPage.aspx
        <script src="Scripts/jquery-3.4.1.js"></script>
        <script>
            function getOption() {
                $.ajax({
                    url: "DDLService.asmx/getOption",
                    type: "POST",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        var jsonArr = $.parseJSON(data.d);
                        $.each(jsonArr, function (index, value) {
                            $("#Select1").append($('<option/>').val(value.id).text(value.item));
                        })
                    },
                    error: function () {
                        alert("there is something worng!")
                    }
                });
            }
    
            $(document).ready(function () {
                getOption();
            });
    
            function myFunction() {
                var sh = $("#Select1")[0].scrollHeight;
                var ch = $("#Select1")[0].clientHeight;
                var st = $("#Select1")[0].scrollTop;
                if (ch + st == sh) {
                    getOption();
                    for (var i = 0; i < 5; i++) {
                        $("#Select1")[0].remove(0);
                    }
                }
            }
        </script>
    </head>
    <body>
        <div id="selectDiv">
            <select id="Select1" size="5" multiple="multiple" onscroll="myFunction()">
            </select>
        </div>
    </body>
    

    Result:

    If I misunderstood your question, please provide more details.

    Hope this can help you.

    Best regards,

    Xudong Peng

    Tuesday, June 2, 2020 5:51 AM
  • User-590375999 posted

    Thank you XuDong,

    How to implement the search feature in your code?

    Wednesday, June 3, 2020 2:55 AM
  • User-939850651 posted

    Hi, sivapooja

    I modify my code to implement the search feature, and I'm not sure this is what you expect.

    More details, please refer below code:

    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="Scripts/jquery-3.4.1.js" type="text/javascript"></script>
        <script type="text/javascript">
            function getOption() {
                $.ajax({
                    url: "DDLService.asmx/getOption",
                    type: "POST",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        var jsonArr = $.parseJSON(data.d);
                        $.each(jsonArr, function (index, value) {
                            $("#TestSelect").append($('<option/>').val(value.item).text(value.item));
                        })
                    },
                    error: function () {
                        alert("there is something worng!")
                    }
                });
            }
            $(document).ready(function () {
                getOption();
            });
            
            document.addEventListener("keyup", function (e) {
                var textList = [];
                if (e.target.id === "searchBox") {
                    //clear select status
                    $('#TestSelect').find("option:selected").removeAttr("selected");
                    //get options
                    $('#TestSelect option').each(function () {
                        textList.push($(this).text());
                    });
                    for (var i = 0; i < textList.length; i++) {
                        var text = e.target.value; 
                        var lowerText = text.toLowerCase();
                        var lowerOptionText = textList[i].toLowerCase();
                        //you can also change the matching rules
                        var regex = new RegExp("^" + lowerText, "i");
                        var result = regex.test(lowerOptionText);
                        if (result) {
                            $("#TestSelect option[value='" + textList[i] + "']").attr("selected", "selected");
                            return false; 
                        }
                    }
                }
            });
    
            function myFunction() {
                var sh = $("#TestSelect")[0].scrollHeight;
                var ch = $("#TestSelect")[0].clientHeight;
                var st = $("#TestSelect")[0].scrollTop;
                if (ch + st == sh) {
                    getOption();
                }
            }
        </script>
    </head>
    <body>
        <div>
            <input type="search" width="200" id="searchBox"><br />
            <select id="TestSelect" size="5" style='width: 200px;' onscroll="myFunction()">
            </select>
        </div>
    </body>
    

    Result:

    If there is any other questions, please feel free to let me know.

    Best regards,

    Xudong Peng

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, June 4, 2020 8:11 AM