Программное отключение OnClick во вложенном Div с помощью Javascript/JQuery

У меня есть приложение Javascript, которое позволяет пользователям включать/отключать элементы управления во время выполнения. Мне удалось отключить/включить вложенные входы и кнопки, но до сих пор мне не удалось отключить событие onclick в Div, чтобы значок в кружке нельзя было выбрать:

введите здесь описание изображения

Сгенерированный HTML выглядит так:

<div id="56f81c3d-9666-4dab-8f35-d36e894f426f" class="field alert-success">
    <div class="field-name">By default I am disabled - Single Photo</div>
        <div id="56f81c3d-9666-4dab-8f35-d36e894f426fPhoto" class="clearfix" style="cursor: pointer; max-width: 100%; max-height: 100%;" onclick="ffffield.getFieldHandler('PhotoPicker').showPhotoCapture(this, '56f81c3d-9666-4dab-8f35-d36e894f426f');">
            <img class="pull-right" src="/MySite.Web/Content/device/images/chevronRight.png" style="width: 20px; position:relative; top: 7px;">
            <img class="pull-right" src="/MySite.Web/Content/device/images/[email protected]" style="width: 40px; position:relative; top: -5px;">
        </div>
    </div>
</div>.

В этом фрагменте мне нужно отключить «onclick». Я не привередлив - это может быть отключение указателя или щелчка.

Я пробовал следующие попытки сделать эту работу:

$("#56f81c3d-9666-4dab-8f35-d36e894f426f").children().off('click');

а также

$("#56f81c3d-9666-4dab-8f35-d36e894f426f input").prop("disabled", true);

а также

$("#"#56f81c3d-9666-4dab-8f35-d36e894f426f input").attr("disabled", true);

а также

$(""#56f81c3d-9666-4dab-8f35-d36e894f426f input").attr("disabled", "disabled");

на основе некоторых других вопросов stackoverflow.


person Stephen McCormick    schedule 10.02.2017    source источник
comment
stackoverflow.com/questions/18982642/   -  person epascarello    schedule 11.02.2017
comment
@epascarello Спасибо за ответ. Я попробовал принятый ответ в потоке стека выше. Каков способ jquery отключить указатель?   -  person Stephen McCormick    schedule 11.02.2017
comment
используйте css() .....   -  person epascarello    schedule 11.02.2017


Ответы (2)


.off() может отключать только прослушиватели событий, которые были добавлены с помощью .on() (или других методов jQuery, поскольку все они вызывают .on() внутри). Чтобы удалить прослушиватель событий, добавленный с помощью атрибута onclick, необходимо переназначить свойство onclick:

$("#56f81c3d-9666-4dab-8f35-d36e894f426f").children().prop('onclick', null);
person Barmar    schedule 10.02.2017
comment
Это сработало как шарм. Как мне снова включить его, поскольку пользователь может его переключать? - person Stephen McCormick; 11.02.2017
comment
Сохраните старое значение в переменной. - person Barmar; 11.02.2017
comment
К сожалению, я не могу сохранить последнее значение, поскольку его могут быть сотни экземпляров (если только я не создам совершенно новую конструкцию). Но я могу восстановить тот же метод на месте. Как это будет выглядеть в данном случае? $(# + targetField.id).on('щелчок', ffffield.getFieldHandler('PhotoPicker').showPhotoCapture(this,' + targetField.id + Photo');); Где targetField.id — #56f81c3d-9666-4dab-8f35-d36e894f426f? - person Stephen McCormick; 11.02.2017
comment
Вам действительно нужно удалить обработчики? Почему бы просто не установить переменную, которую функция-обработчик проверяет перед тем, как что-либо делать? - person Barmar; 11.02.2017
comment
Я, вероятно, могу пропустить удаление обработчика - на самом деле мне интересно, не лучше ли отключить указатель для элемента управления. Что касается переменной... Я мог бы, но тогда мне нужно построить массив флагов, проиндексированных по идентификатору, так как этих полей могут быть сотни. Просто кажется излишним просто отключить элемент управления. - person Stephen McCormick; 12.02.2017
comment
Я думаю, проблема в том, что div не является элементом управления, поэтому он не поддерживает свойство disabled. - person Barmar; 12.02.2017
comment
Я прочитал несколько сообщений об изменении стиля, чтобы исключить сам указатель для DIV. Но я не уверен, что это возможно. Довольно новичок в javascript и никогда не был большим программистом CSS. - person Stephen McCormick; 12.02.2017
comment
Я не уверен, как это работает. Похоже, это просто делает указатель невидимым, но вы все равно можете щелкнуть им. - person Barmar; 12.02.2017

Попробуйте этот код:

function disableDiv( div ) {
    div.addEventListener( "click", function ( event ) {
        event.stopPropagation();
    }, true );
}

// call the disable div handler
disableDiv( document.getElementById( "56f81c3d-9666-4dab-8f35-d36e894f426f" ) );
person John Zenith    schedule 10.02.2017