首页 > 解决方案 > 选择 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 脚本执行?

标签: javascriptlaravel

解决方案


Laravel 将处理事件和监听器。从这里开始:https ://laravel.com/docs/8.x/events


推荐阅读