1

I have bootstrap modal that gets created depending upon a search the user kicks off. The search returns an HTML table that is embedded in this new modal. Ultimately, upon the user clicking a row <tr> I would like that rows contents be passed into a form using jquery. My issue however is that i am not able to even get the click event to register to the <tr> of which I assign the class result-item. Im assuming this is because the table is created dynamically after the script is parsed but am unsure as to how to compensate.

View

<div id="IHS-Search-Results" class="modal fade" role="dialog">
<div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
            <h4 class="modal-title">IHS Search Results</h4>
        </div>
        <div class="modal-body">
            <p>Select the well from the table bellow to populate form.</p>
            <div id="results-table"></div>
        </div>
        <div class="modal-footer">
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="button" value="Close" data-dismiss="modal" class="btn btn-danger" />
                </div>
            </div>

        </div>
    </div>

</div>

... // did not include unnecessary code

...

@section Scripts {
<script>

    $(document).ready(function () {
        $('#submitModal').click(function () {

            var data = {
                'API14' : $('#API14').val()
            }

            console.log(data)

            $.ajax({
                url: '/IHS_XREF/Search',
                data: data,
                success: function (data) {
                    $('#IHS-Search').modal('toggle');
                    $('#results-table').html(data);
                    $('#IHS-Search-Results').modal('toggle');

                }

            });


        });

        $('.result-item').click(function (e) {

            console.log("click");

            var api = $(this).children('#API').val();
            var entityID = $(this).children('#EntityID').val()
            var prodZone = $(this).children('#ProductionZone').val()
            var lease = $(this).children('#LeaseName').val()
            var wellNo = $(this).children('#WellNum').val()

            $('#api14').val(api);
            $('#entity').val(entityID);
            $('#prod_zone_nm').val(prodZone);
            $('#lease_name').val(lease);
            $('#well_no').val(wellNo);
            $('#ihs-search-results').modal('toggle');

        });
    });

</script>
}

Controller

    [HttpGet]
    public ActionResult Search(string API14)
    {
        IHSProductionSetXrefCreate ps = new IHSProductionSetXrefCreate();

        string[] idArray = new string[] {API14};

        byte[] export = diwh.Download(idArray);

        using (MemoryStream ms = new MemoryStream(export))
        {

            XmlSerializer serializer = new XmlSerializer(typeof(IHSProductionSetXrefCreate));
            try
            {
                IHSProductionSetXrefCreate result = (IHSProductionSetXrefCreate)serializer.Deserialize(ms);
                ps = result;
            }
            catch (Exception e)
            {
                throw new Exception("Generic Exception - Issue with Serialization", e);
            }


        }

        List<IHS_API_SearchResults> searchResults = new List<IHS_API_SearchResults>();
        foreach(var i in ps.ProducingEntity)
        {
            string API = i.WellBore[0].Identification.API;
            string ENT = i.ProdMeta[0].EntityID;
            string ZNE = i.Header[0].Zone.Zone_Name;
            string LSE = i.Header[0].Designation.Designation_Name;
            string WNO = i.WellBore[0].WellNum.WellNum;

            searchResults.Add(new IHS_API_SearchResults {API14 = API, EntityID = ENT, ProductionZone = ZNE, LeaseName = LSE, WellNum = WNO});

        }


        return PartialView(searchResults);
    }

Partial View - Returned to View from Controller

@model List<IHS_DATA_MANAGER.Models.IHS_API_SearchResults>

<table class="table table-bordered table-striped table-hover" id="r-table">
    <thead>
        <tr>
            <th class="text-nowrap">
                @Html.DisplayNameFor(model => model[0].API14)
            </th>
            <th class="text-nowrap">
                @Html.DisplayNameFor(model => model[0].EntityID)
            </th>
            <th class="text-nowrap">
                @Html.DisplayNameFor(model => model[0].ProductionZone)
            </th>
            <th class="text-nowrap">
                @Html.DisplayNameFor(model => model[0].LeaseName)
            </th>
            <th class="text-nowrap">
                @Html.DisplayNameFor(model => model[0].WellNum)
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr class="result-item">
                <td id="API">@item.API14</td>
                <td id="EntityID">@item.EntityID</td>
                <td id="ProductionZone">@item.ProductionZone</td>
                <td id="LeaseName">@item.LeaseName</td>
                <td id="WellNum">@item.WellNum</td>
            </tr>
        }

    </tbody>


</table>

@section Scripts {


}

Again, it as if the click event never gets registered to the table row.

1 Answer 1

1

EDIT 2:

Ok, let's go on a higher level, change the handler to be:

$(document).on('click','.result-item',function(){
    alert(' clicked');
})

if that doesn't work then there is a different problem in your page (another JS error probably).

EDIT: Not sure if it is .table-item or .result-item, on the question you say .table-item but the actual row is .result-item, change accordingly.

As the table is created dynamically you need to use the .on method from jquery instead of .click, like this:

$('.result-item').on('click',function(){
    alert(' clicked');
})

or

$('.table-item').on('click',function(){
    alert(' clicked');
})

Jsfiddle:

https://jsfiddle.net/otax1L3y/

Sign up to request clarification or add additional context in comments.

3 Comments

Tried this, still does not appear to be working. I am wondering if the fact that it is in a modal is affecting it? Or if the fact that iam using the Razor syntaz @section scripts{}...
This did the trick.. Do you have a guess as to why the previous did not?
Scope issues. Sometimes it helps going up a level just to make sure you are getting the correct element. Glad it helped.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.