Cuando mis usuarios son de solo lectura, quiero limitar algunos accesos. En este caso, la posibilidad de editar notas. No puedo explicar por qué con este código, todavía puedo abrir mi nota cuando el usuario es de solo lectura.
if(codeParam == '{{ $baby->readOnlyCode }}' ) { //I am in side this code $("a.btn, .btn-link, #logNote, pre, .btn").click(function() { return false; }); }https://mybabies.app/baby/797b808a-e8c6-4a83-acf4-14ebe1f776b1?code=rithys4k
Haga clic en el cuadro de notas, verá que de alguna manera aún puede activarse.
Incluso intenté agregar el cheque y devolver falso en showModal()
function showModal(val, type, logId ) { console.log("val, type, logId",val, type, logId); if(codeParam == '{{ $baby->readOnlyCode }}' ) { return false; } ...o intenté prevenirPredeterminado
if(codeParam == '{{ $baby->readOnlyCode }}' ) { $("a.btn, .btn-link, #logNote, pre, .btn").click(function(e) { e.preventDefault(); return false; }); }Si viste lo que me perdí, por favor házmelo saber.
El problema que tiene es que está adjuntando un segundo detector de eventos que solo devuelve falso y evita el valor predeterminado, pero el primer detector de eventos que muestra el modal todavía está adjunto.
Es decir,
$("a.btn").click(function(e) { alert("Hello World!"); }); $("a.btn").click(function(e) { return false; // this does nothing to the previously attached event listener });Soluciones posibles:
Al inspeccionar su código, tiene algunas opciones:
$(document).on('show.bs.modal', '#noteModal', function (e) { // move the check for the param here if(codeParam == 'rithys4k' ) { return false; } }); O: use atributos disabled en los botones/enlaces cuando esté en modo de solo lectura.
Para brindarle más información: $().click() es realmente solo una abreviatura de addEventListener en el evento de clic
Tienes que usar on method con suffix en jQuery, en jQuery Docs
const clickAction = (e) => { // do anything } $('.btn, pre').on('click.go', clickAction); Use off para eliminar eventos , off jQuery Docs
$('body').off("click.go", ".btn, pre"); // OR $('body').off("click.go", ".btn, pre", clickAction); // OR $('.btn, pre').off("click.go");Puede depurar el orden de los eventos de esta manera: $._data($("#logNote").get(0), "events"); . Los nuevos eventos van hasta el final y se ejecutan de arriba a abajo. En su caso, todo lo que necesita hacer es recordar la función de activación y eliminarla/agregarla cuando sea necesario, por ejemplo:
const cbToggleNoteModal = () => $("#toggleNoteModal").click(); // you have to store the cb in a variable $("#logNote").click(cbToggleNoteModal); // to disable the cb, just de-register the callback $("#logNote").off("click", cbToggleNoteModal); // and register it back when you need it $("#logNote").click(cbToggleNoteModal);