javascript - 选择 onchanged javascript
问题描述
我正在使用 Laravel 8 创建一个网站。该视图有一个带有“onchanged”javascript 函数的 <select。该函数未被调用。功能:
function changeDescription(selObject){
var idx = selectObj.selectedIndex;
var pid = selectObj.options[idx].value;
alert('changeDescription');
let currentEvent = jevents.findIndex((event, pid) => event.id == pid);
let description = jevents[currentEvent].description;
let descriptionField = document.getElementById("description");
descriptionField.value = description;
alert('Descr: ' + descriptionField.value);
}
观点(部分):
<sect name="event_id" id="event_id" class="form-control" required onchange="ChangeDescription.js(this)">
@foreach($jdevents as $event)
<option name="pid" value="{{$event->id}}" id="event">{{$event->event}}</option>
@endforeach
</select>
在 layout.app 文件中:
<head>
<!-- Scripts -->
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.6.0/dist/alpine.js" defer></script>
<script type="text/javascript" src="..\..\public\js\ChangeDescription.js(selObject)"></script>
</head>
<body onChanges="ChangeDescription.js()">
</body>
控制器:
public function index()
{
$events = event::all()->SortBy('event');
$jevents = JSON_encode($events, false);
$jdevents = JSON_decode($jevents);
return view('events', compact(['jdevents']));
}
随着更多的研究,我想出了这个:
function changeDescription(){
const chdescr = document.getElementById("event_id");
chdescr.addEventListener("onchange", function(){
const idx = chdescr.options[chdescr.selectedIndex].value;
const pid = chdescr.options[idx].value;
alert('changeDescription');
let currentEvent = jevents.findIndex((event, pid) => event.id == pid);
let description = jevents[currentEvent].description;
let descriptionField = document.getElementById("description");
descriptionField.value = description;
alert('Descr: ' + descriptionField.value);
}} <---- red underscore here
在视图中,<select 现在变为:
<select name="event_id" id="event_id" size="" class="form-control">
@foreach($jdevents as $event)
<option name="pid" value="{{$event->id}}" id="event">{{$event->event}}</option>
@endforeach
</select>
在布局文件中:
<script type="text/javascript" src="..\..\public\js\ChangeDescription.js($this)"></script>
这些方法都不会触发脚本。所以,我的问题是:如何让 js 脚本执行?
解决方案
Laravel 将处理事件和监听器。从这里开始:https ://laravel.com/docs/8.x/events