2017-07-02 27 views
0

我正在爲我的Laravel刀片模板文件添加AJAX腳本。但由於某種原因,我的JavaScript無法正常工作。它坐在頁面上,一切都很好,但是當我嘗試通過點擊按鈕來觸發功能時,它不起作用。Laravel 5.4在刀片模板中粘貼JavaScript

此JavaScript代碼不能位於單獨的文件中,因爲我裝箱了很多不同的表單,應該使用它自己的JavaScript函數處理這些表單。所以我需要在窗體的循環中使用這個函數。

這裏是我的整個葉片模板文件腳本:

@if($inventories) 

<a href="{{ url('/inventory') }}" type="button" class="btn btn-sm btn-primary"> <<- Back To Inventory</a>  
<div class="text-center"><b>Search Page</b></div> 
<br> 
<br> 

<div class="search"> 
    <div class="col-md-12"> 
     @include(env('THEME').'.search_box') 
    </div> 
</div> 

<table> 

    @foreach($inventories as $inventory) 
    <tr > 
     <td class="part_img" rowspan="3"><a href="{{ route('inventory.show',['slug' => $inventory->slug]) }}"><img src="{{ asset(env('THEME')) }}/images/inventory/{{$inventory->main_img}}"></a></td> 
    </tr> 
    <tr> 
     <td class="inventory_part_title" colspan="8"> 
      <div style="float: left; margin: 0 30px;">{{ $inventory->part_number }}</div> 
      <div style="float: left;"><a href="{{ route('inventory.show',['slug' => $inventory->slug]) }}">{{ $inventory->title }}</a></div> 
      <div style="float: right; margin-right: 50px;">{{ $inventory->upc_number }}</div> 
     </td> 
    </tr> 
    <tr> 
     <td><b>Location:</b> {{ $inventory->storage_location }}</td> 
     <td><b>Brand:</b> {{ $inventory->brand }}</td> 
     <td><b>Supplier:</b> {{ $inventory->supplier }}</td> 
     <td><b>GBP:</b> &#163;{{ $inventory->unit_price_gbp }}</td> 
     <td><b>USD:</b> ${{ $inventory->unit_price_usd }}</td> 
     <td><b>In Stock:</b> {{ $inventory->unit_in_stock }}</td> 
     <td><b>Sold:</b> {{ $inventory->unit_sold }}</td> 
     <td> 
      <div class="onpage-sold-input"> 
       {!! Form::open(['url' => route('sold.sold'),'class'=>'contact-form', 'id'=>'search-sold-button-'.$inventory->id,'method'=>'POST']) !!} 
        {!! Form::text('sold', old('sold'), array('class'=>'form-control', 'placeholder'=>'Qty.')) !!} 
        <input type="hidden" name="part_id" value="{{ $inventory->id }}"> 
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
        {!! Form::button('Sold', ['class' => 'btn btn-sm btn-success sold-button', 'id'=>'sold-button-'.$inventory->id,'type'=>'submit']) !!} 
       {!! Form::close() !!} 
      </div> 

      <script type="text/javascript"> 
       $('#sold-button-{{ $inventory->id }}').on('click', function (e) { 
        e.preventDefault(); 

        var form = $('#search-sold-button-{{ $inventory->id }}'), 
         data = form.serialize(), 
         ajax_url = form.attr('action'), 
         alert_section = $('.alert-section'); 

         console.log(ajax_url); 
         console.log(data); 

        $.post(ajax_url, data, function (resp) { 
         alert_section.fadeIn().find('.alert').html(resp); 
         setTimeout(function() { 
          alert_section.fadeOut(); 
         }, 3000) 
        }) 
       }); 
      </script> 

     </td> 
     <!--<td><button type="button" class="btn btn-sm btn-success">Edit</button></td>--> 
    </tr> 
    <tr> 
     <td colspan="8"></td> 
    </tr> 
    @endforeach 

</table> 

@else  
<p>Inventory is empty!</p> 
@endif 

我怎樣才能解決這個問題?

+0

您應該創建JS代碼的函數,而不是在循環中使用它。 你的做法是不好的做法。 –

+0

@Vishal Tarkar請你發表一個這種功能的例子 –

回答

0

下面是你給定的代碼的例子。希望這會幫助你。

代碼可能不起作用我還沒有測試過它。但這樣你就不必把JS代碼放在Loop中,而只需要一個函數。

這裏我們在提交點擊事件時調用JS函數「searchSold」。

@if($inventories) 

      <a href="{{ url('/inventory') }}" type="button" class="btn btn-sm btn-primary"> <<- Back To Inventory</a>  
      <div class="text-center"><b>Search Page</b></div> 
      <br> 
      <br> 

      <div class="search"> 
       <div class="col-md-12"> 
        @include(env('THEME').'.search_box') 
       </div> 
      </div> 

      <table> 

       @foreach($inventories as $inventory) 
       <tr > 
        <td class="part_img" rowspan="3"><a href="{{ route('inventory.show',['slug' => $inventory->slug]) }}"><img src="{{ asset(env('THEME')) }}/images/inventory/{{$inventory->main_img}}"></a></td> 
       </tr> 
       <tr> 
        <td class="inventory_part_title" colspan="8"> 
         <div style="float: left; margin: 0 30px;">{{ $inventory->part_number }}</div> 
         <div style="float: left;"><a href="{{ route('inventory.show',['slug' => $inventory->slug]) }}">{{ $inventory->title }}</a></div> 
         <div style="float: right; margin-right: 50px;">{{ $inventory->upc_number }}</div> 
        </td> 
       </tr> 
       <tr> 
        <td><b>Location:</b> {{ $inventory->storage_location }}</td> 
        <td><b>Brand:</b> {{ $inventory->brand }}</td> 
        <td><b>Supplier:</b> {{ $inventory->supplier }}</td> 
        <td><b>GBP:</b> &#163;{{ $inventory->unit_price_gbp }}</td> 
        <td><b>USD:</b> ${{ $inventory->unit_price_usd }}</td> 
        <td><b>In Stock:</b> {{ $inventory->unit_in_stock }}</td> 
        <td><b>Sold:</b> {{ $inventory->unit_sold }}</td> 
        <td> 
         <div class="onpage-sold-input"> 
          {!! Form::open(['url' => route('sold.sold'),'class'=>'contact-form', 'id'=>'search-sold-button-'.$inventory->id,'method'=>'POST']) !!} 
           {!! Form::text('sold', old('sold'), array('class'=>'form-control', 'placeholder'=>'Qty.')) !!} 
           <input type="hidden" name="part_id" value="{{ $inventory->id }}"> 
           <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
           {!! Form::button('Sold', ['class' => 'btn btn-sm btn-success sold-button', 'id'=>'sold-button-'.$inventory->id,'type'=>'submit','onclick' => 'searchSold(event,".$inventory->id.")' ]) !!} 
          {!! Form::close() !!} 
         </div> 

        </td> 
        <!--<td><button type="button" class="btn btn-sm btn-success">Edit</button></td>--> 
       </tr> 
       <tr> 
        <td colspan="8"></td> 
       </tr> 
       @endforeach 

      </table> 

@else  
    <p>Inventory is empty!</p> 
@endif 

     <script type="text/javascript"> 

     function searchSold(event,inventory_id){ 

      event.preventDefault(); 

      var form = $('#search-sold-button-'+inventory_id); 
      var data = form.serialize(); 
      var ajax_url = form.attr('action'); 
      var alert_section = $('.alert-section'); 

      $.post(ajax_url, data, function (resp) {          
       alert_section.fadeIn().find('.alert').html(resp); 
       setTimeout(function() { 
        alert_section.fadeOut(); 
       }, 3000) 
      }); 
     } 
     </script>