访问dom

时间:2017-07-27 01:20:29

标签: javascript jquery leaflet openstreetmap

如何访问输入文本字段的值,该字段在dom之后可以加载?

我正在使用传单,插件会创建一个输入字段,我不知道如何访问它。

如果我试试这个:

$('#myTextbox1').on('input', function() {
    alert($('#myTextbox1').val());
});

我没有得到任何结果。我猜,jQuery无法处理创建的输入字段。

我的HTML看起来像这样:

@extends('layouts.app')

@section('head')
<link rel="stylesheet" type="text/css" href="{{ asset('css/leaflet/leaflet.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('css/leaflet/leaflet-search.css') }}">
@ensection

@section('content')

<div class="col-md-8 col-md-offset-2 form-container">

<div id="map-adress"></div>

<div class="panel panel-default marker-panel">
    <div class="panel-heading">Create a post</div>
    <div class="panel-body">  
        <div class="col-md-8 col-md-offset-4">
            <p>Insert the adress of the marker position<br>
                (You can move the marker on the map to the right position).</p>
        </div>

        <div class="form-group">
            <label for="findbox-adress" class="col-md-4 control-label find-label">Marker Location</label>
            <div class="col-md-6">
                <div id="findbox-adress"></div>
            </div>

            <div class="col-md-2">
                <button type="submit" class="btn btn-primary user_marker_btn">
                    Validate
                </button>
            </div>
        </div>
    </div>
</div>

<div id="user_marker_adress" class="panel panel-default">
    <div class="panel-heading">Validate the marker adress</div>
    <div class="panel-body">

        <form class="form-horizontal" method="POST" action="{{ route('userposts.create') }}">
            {{ csrf_field() }}

            <div class="form-group">
                <label for="a_street" class="col-md-4 control-label">Street</label>
                <div class="col-md-6">
                    <input id="a_street" type="text" class="form-control" name="a_street" required>
                </div>
            </div>

            <div class="form-group">
                <label for="a_street_no" class="col-md-4 control-label">Street No.</label>
                <div class="col-md-6">
                    <input id="a_street_no" type="text" class="form-control" name="a_street_no" required>
                </div>
            </div>

            <div class="form-group">
                <label for="a_zip_code" class="col-md-4 control-label">Zip Code</label>
                <div class="col-md-6">
                    <input id="a_zip_code" type="text" class="form-control" name="a_zip_code" required>
                </div>
            </div>

            <div class="form-group">
                <label for="a_state" class="col-md-4 control-label">State</label>
                <div class="col-md-6">
                    <input id="a_state" type="text" class="form-control" name="a_state" required>
                </div>
            </div>

            <div class="form-group">
                <label for="a_country" class="col-md-4 control-label">Country</label>
                <div class="col-md-6">
                    <input id="a_country" type="text" class="form-control" name="a_country" required>
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-8 col-md-offset-4">
                    <button type="reset" class="btn btn-danger">
                        Clear
                    </button>
                    <button type="submit" class="btn btn-primary">
                        Next
                    </button>
                </div>
            </div>

        </form>

    </div>
</div>

    @endsection

@section('scripts')
<script type="text/javascript" src="{{ asset('js/leafleat/leaflet.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/leafleat/leaflet-search.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/leafleat/marker-adress.js') }}"></script>
@endsection

ID为“findbox-adress”的div触发插件,该插件将创建带有输入的表单,我无法访问。

希望,有人对我的问题有了理解......

修改: 好的,我在这个元素中找到了一个ID,并且ID正在工作,但只有我输入的文本。插件给了我一个下拉选项(像ajax这样的自动完成),我可以在其中选择一个无序列表李的。但在那里,我无法获得价值?如果有人点击自动填充(li's),我怎样才能获得价值?

我的尝试:

$(".user_marker_btn").click(function(){
    console.log($("#searchtext9").val());
});

2 个答案:

答案 0 :(得分:1)

在动态创建的元素上,使用事件委托来附加事件侦听器。

将事件侦听器附加到DOM-load上存在的父元素,然后将您希望委派事件的元素传递给:

$('body').on('input', '#myTextbox1', function() { 
    alert($('#myTextbox1').val()); 
});

答案 1 :(得分:0)

首先,您的代码看起来不正确。请参阅jQuery手册:http://api.jquery.com/on/ 这可能是:

$( "body" ).on( "click", "input#myTextbox1" function() {
  console.log( $( this ).val() );
});

正如你所说,“带有ID的div”findbox-adress“触发插件,它将创建带有输入的表单” 如果您可以在点击或触发div“findbox-adress”时跟踪事件,您可以轻松检查表单是否已添加到DOM中,然后使用$(“input#myTextbox1”检查输入字段“).VAL();

或者,如果您无法跟踪加载表单的事件,则需要有一个函数来检查表单何时加载到DOM中。这可能是使用setTimeout()或框架/库的任何其他方法。最后在表单加载时停止跟踪。