在 Javascript 和 Laravel 5.3 中使用 Foreach 循环
Use Foreach Loop in Javascript with Laravel 5.3
我想制作一个按钮来添加新的项目行:
这是create.blade.php
中的HTML
<div class="createOrderForm" id="orderMenuItems">
<div class="orderItem">
<label> Item : </label>
<select name="item[]" required>
<option value="">Menu Items</option>
@foreach ($menuItems as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
<label>Quantity :</label>
<input type="text" name="quantity[]" value="" required>
</div>
</div>
这是包含的 create.js :
$(document).ready(function () {
console.log("Welcome To create order Page");
var addItem = $('#addItem');
var orderMenuItems = $('#orderMenuItems');
$(addItem).click(function(e){
var newItem = '<div class="orderItem">';
newItem += '<label> Item : </label>';
newItem += '<select name="orderItem[]">';
newItem += '<option value="">Menu Items</option>';
newItem += "@foreach ($menuItems as $item)";
var itemID = "{!! $item->id !!}";
newItem += '<option value="'+ itemID +'">'+ itemID +'</option>';
newItem += "@endforeach";
newItem += '</select>';
newItem += '<label>Quantity :</label>';
newItem += '<input type="text" name="quantity[]" value="" required>';
newItem += '</div>';
$(orderMenuItems).append(newItem);
});
});
该按钮有效并添加了新行,但新行中的菜单项有问题:
我觉得问题出在这里:
newItem += "@foreach ($menuItems as $item)";
var itemID = "{!! $item->id !!}";
newItem += '<option value="'+ itemID +'">'+ itemID +'</option>';
newItem += "@endforeach";
我尝试使用:
@foreach ($menuItems as $item)
....
@endforeach
而不是:
newItem += "@foreach ($menuItems as $item)";
....
newItem += "@endforeach";
但是没用。
我该如何解决??
我没有laravel方面的经验,但我猜它只是对js文件不负责任。
我不喜欢这种将标记存储在两个地方的方法。一次在 html 中,一次在 JS 中的字符串中。而且你必须保持这两个地方同步。
我可以建议一个不同的方法吗:
在 create.blade.php 中:
<div class="createOrderForm" id="orderMenuItems">
<div class="orderItem">
<label> Item : </label>
<select name="item[]" required>
<option value="">Menu Items</option>
@foreach ($menuItems as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
<label>Quantity :</label>
<input type="text" name="quantity[]" value="" required>
</div>
</div>
模板可以在页面的任何地方,为什么不把它放在使用它的地方
并在 create.js
$(document).ready(function () {
console.log("Welcome To create order Page");
var $addItem = $('#addItem');
var $orderMenuItems = $('#orderMenuItems');
$addItem.click(function(){
var markup = $orderMenuItems.children('.orderItem')[0].outerHTML;
$orderMenuItems.append(markup);
});
});
我想制作一个按钮来添加新的项目行:
这是create.blade.php
中的HTML <div class="createOrderForm" id="orderMenuItems">
<div class="orderItem">
<label> Item : </label>
<select name="item[]" required>
<option value="">Menu Items</option>
@foreach ($menuItems as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
<label>Quantity :</label>
<input type="text" name="quantity[]" value="" required>
</div>
</div>
这是包含的 create.js :
$(document).ready(function () {
console.log("Welcome To create order Page");
var addItem = $('#addItem');
var orderMenuItems = $('#orderMenuItems');
$(addItem).click(function(e){
var newItem = '<div class="orderItem">';
newItem += '<label> Item : </label>';
newItem += '<select name="orderItem[]">';
newItem += '<option value="">Menu Items</option>';
newItem += "@foreach ($menuItems as $item)";
var itemID = "{!! $item->id !!}";
newItem += '<option value="'+ itemID +'">'+ itemID +'</option>';
newItem += "@endforeach";
newItem += '</select>';
newItem += '<label>Quantity :</label>';
newItem += '<input type="text" name="quantity[]" value="" required>';
newItem += '</div>';
$(orderMenuItems).append(newItem);
});
});
该按钮有效并添加了新行,但新行中的菜单项有问题:
我觉得问题出在这里:
newItem += "@foreach ($menuItems as $item)";
var itemID = "{!! $item->id !!}";
newItem += '<option value="'+ itemID +'">'+ itemID +'</option>';
newItem += "@endforeach";
我尝试使用:
@foreach ($menuItems as $item)
....
@endforeach
而不是:
newItem += "@foreach ($menuItems as $item)";
....
newItem += "@endforeach";
但是没用。
我该如何解决??
我没有laravel方面的经验,但我猜它只是对js文件不负责任。
我不喜欢这种将标记存储在两个地方的方法。一次在 html 中,一次在 JS 中的字符串中。而且你必须保持这两个地方同步。
我可以建议一个不同的方法吗:
在 create.blade.php 中:
<div class="createOrderForm" id="orderMenuItems">
<div class="orderItem">
<label> Item : </label>
<select name="item[]" required>
<option value="">Menu Items</option>
@foreach ($menuItems as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
<label>Quantity :</label>
<input type="text" name="quantity[]" value="" required>
</div>
</div>
模板可以在页面的任何地方,为什么不把它放在使用它的地方
并在 create.js
$(document).ready(function () {
console.log("Welcome To create order Page");
var $addItem = $('#addItem');
var $orderMenuItems = $('#orderMenuItems');
$addItem.click(function(){
var markup = $orderMenuItems.children('.orderItem')[0].outerHTML;
$orderMenuItems.append(markup);
});
});