Laravel - Associar evento ao option [RESOLVIDO]

9 respostas Resolvido
laravel
C

gente, possuo um select que lista psicólogos e estagiários. o evento será disparado caso o colaborador selecionado seja psicólogo.
fiz isso, creio que a lógica seja algo parecido…

<select name="colaborador" class="custom-select ls-select {{$errors->has('colaborador')?'is-invalid':''}}" id="colaborador">   
<option {{$cl->psi_codigo==$pac->psi_codigo ? 'selected':''}}
                                {{$cl->psi_ativo==2   ? 'style=display:none;':''}}
                                {{$cl->psi_funcao_exercida==1   ? 'onchange=DesabilitaResponsavelPsi()':''}}
                               value="{{$cl->psi_codigo}}">{{$cl->PSICOLOGOS}}</option>
                            @endforeach
                        </select> `


//aqui associo o evento caso seja psicologo
    {{$cl->psi_funcao_exercida==1   ? 'onchange=DesabilitaResponsavelPsi()':''}}

9 Respostas

J

Qual exatamente o problema? Posta também o código HTML e JS que o browser recebeu.

C
<select name="colaborador" class="custom-select ls-select " id="colaborador">   
                       		  <option value=""></option> 
                                                          <option onchange="DesabilitaResponsavelPsi()" value="2">Psicólogo: andrea cardoso</option>
                                }
                                                          <option selected="" style="display:none;" onchange="DesabilitaResponsavelPsi()" value="1">Psicólogo: andressa leone</option>
                                }
                                                          <option style="display:none;" onchange="DesabilitaResponsavelPsi()" value="3">Psicólogo: Ricardo souza</option>
                                }
                                                    </select>


function DesabilitaResponsavelPsi(){
    
   document.getElementById("supervisor").disabled = true;
   
}
J

E qual o problema? Algum erro no console do browser? Quando você debuga no browser o que dá errado?

C

o problema que o js não executa. passei um alert na função e não aparece.
fiz essa mesma lógica fora do laravel e o js não executa…

<select >
				<option  onchange="acao3()" value="ba">Bahia</option>
				<option value="sp">São Paulo</option>
			</select>


function acao3(){
				alert('modificou!');
			}

só executando quando passo no próprio select.
J

Não tem evento no option, só no select mesmo. Lá dentro você faz o if pro item selecionado.

J

Exemplo:

HTML:

<select onchange="teste(this)">
  <option value="ba">Bahia</option>
  <option value="sp">São Paulo</option>
</select>

<input id="psi_funcao_exercida" type="hidden" value = "1">

JS:

function teste(combo) {
   //  retira a lógica do php e passa pra cá
   if (document.getElementById("psi_funcao_exercida").value == '1' && combo.options[combo.selectedIndex].value == 'sp') {
     alert('modificou!');
   }   
}

Exemplo funcionando: https://jsfiddle.net/tyz0s7u6/

C
Solucao aceita

Fiz de outra forma que me atende.
fiz o seguinte…
Na descrição que é exibido no meu option é exibido a função exercida concatenado com o nome ex: Psicólogo:Cleiton Conceição.
no js obtive a descrição e verifico se no texto tem a palavra psicólogo:

<select name="colaborador" class="custom-select ls-select {{$errors->has('colaborador')?'is-invalid':''}}" id="colaborador"
                         onchange="DesabilitaResponsavelPsi()">   
                       		  <option value=""></option> 
                            @foreach($listaColaboradores as $cl)
                              <option {{$cl->psi_codigo==$pac->psi_codigo ? 'selected':''}}
                                {{$cl->psi_ativo==2   ? 'style=display:none;':''}}
                               value="{{$cl->psi_codigo}}">{{$cl->PSICOLOGOS}}</option>
                                }
                            @endforeach
                        </select> 

//AQUI É O JS.
function DesabilitaResponsavelPsi(){

var texto = document.getElementById("colaborador").options[document.getElementById("colaborador").selectedIndex].text;

if(texto.match(/Psicólogo:/)) //aqui eu verifico se existe a palavra psicólogo.
{
 document.getElementById('supervisor').value = '';
 document.getElementById('supervisor').disabled = true;
}else{
   document.getElementById('supervisor').disabled = false;  
}

   
}
J

A ideia era essa mesmo, fazer a lógica do if no select, meu exemplo foi só para ilustrar um situação qualquer, nao para fazer o trabalho.

C

ahh, entendi…
obrigado pela ajuda. Abraços!!

Criado 2 de março de 2019
Ultima resposta 2 de mar. de 2019
Respostas 9
Participantes 2