JQuery код работает в Chrome, но не в IE
Я реализую этот код в платформе RSA Archer.
Он отлично работает в Chrome, но не в IE9.
function hideDeleteButton(){
var elId = "master_DefaultContent_rts_s2487_f6881srvgrid_ctl00";
var el = document.getElementById(elId);
var className = "GridRemoveImage";
if (el != null) {
var lst = el.getElementsByClassName(className);
for (var i = 0; i < lst.length; ++i) {
lst[i].style.display = 'none';
}
}
}
$(window).bind("load", function(){
hideDeleteButton();
});
document.load = hideDeleteButton();
6 ответов
Поскольку вы пометили вопрос с помощью jquery, я написал этот код jquery, эквивалентный предоставленному вами коду javascript.
$(window).load(function() {
$("#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00").find(".GridRemoveImage").hide();
});
Вам не нужно перебирать каждый элемент, чтобы изменить видимость. Этот код будет иметь совместимость браузера.
Эта новая функция должна сделать работу:
function hidedeletebutton() {
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').each(function() {
$(this).hide();
});
}
он делает то же самое, только короче и с JQuery
Вы также можете скрыть элементы, используя простой CSS, который, скорее всего, будет работать в разных браузерах.
В этом случае:
#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage {
display: none;
}
Этот вопрос имеет несколько фундаментальных аспектов, которые я хотел бы охватить:
Плохой дизайн
Тот факт, что вам нужно скрыть кнопку "Удалить", говорит о том, что ваше приложение Archer не разработано правильно. Вам необходимо контролировать доступ к записям с помощью настройки разрешений ролей и записей, но не с помощью кода пользовательских объектов. Что если я активирую кнопку "Удалить" вручную, используя инструменты разработчика, и удаляю запись? Вы хотите быть ответственным за это как разработчик? Я рекомендую вам сделать два шага назад и изменить дизайн управления доступом в вашем приложении. Вопрос, который вы задали, должен быть задан мной в первую очередь.
Платформа RSA Archer
Все ответы, связанные с jQuery, не учитывают следующие факторы:
- Это код для Custom Object - особый тип объекта, используемый в платформе RSA Archer.
- Платформа Archer генерирует богатые JavaScript веб-страницы. Поэтому я рекомендую вам не перегружать связанные с документом функции, если в этом нет реальной необходимости.
- Пользовательский код объекта выполняется при загрузке формы, в большинстве случаев нет необходимости переопределять обработчик события "document.load".
Это пример кода, который вы можете использовать для IE8-IE11, FireFox, Chrome и Opera:
<script type="text/javascript">
document.getElementById("master_btnDelete").style.display = "none";
</script>
Почему это работает? Поскольку код JavaScript, хранящийся в пользовательских объектах в Archer, будет выполнен, как только он будет загружен как часть самой формы.
IE специфичное поведение
На самом деле вам может потребоваться переопределить событие загрузки окна в случае, если у данного приложения-лучника есть всплывающие диалоговые окна, используемые для заполнения списков значений перекрестных ссылок. В этом случае кнопки панели инструментов, включая кнопку "Удалить", могут восстанавливаться после каждого всплывающего окна. В этом случае вы должны использовать подобный код:
<script type="text/javascript">
// function that will hide the Delete button
function doLoad() {
alert( "The load event is executing" );
document.getElementById("master_btnDelete").style.display = "none";
}
// code that will add load event for IE and none-IE browsers
if (window.addEventListener){window.addEventListener("load",doLoad,false);}
else
if (window.attachEvent) { window.attachEvent("onload",doLoad);}
else
if (window.onLoad) { window.onload = doLoad;}
</script>
К сожалению, Microsoft не очень согласилась с дизайном IE, поэтому вы должны проверить, какой метод обработки событий работает и должен использоваться. Если у вас есть дополнительные вопросы по этому коду, вы можете использовать следующие две ссылки: StackoverFlow Question и MSDN Help Page
Теперь, почему ваш базовый код jQuery не работает? Я не знаю, может быть, версия Archer, которую вы кодируете, использовала версию библиотеки jQuery, которая недостаточно хорошо поддерживает IE9. И это подводит меня к другому моменту.
Использование jQuery, поставляемого с Archer
Вы использовали jQuery в исходном примере кода. Я не рекомендую использовать какие-либо библиотеки при написании пользовательских объектов для Archer.
- Используемая вами библиотека jQuery была предоставлена как часть платформы. Библиотека jQuery может быть "пользовательской сборки", чтобы включать функции, которые вы используете. Или в этом случае включить функции jQuery, используемые разработчиками Archer. В следующей версии Archer этот список может измениться. Что произойдет, если используемые вами функции больше не будут частью библиотеки в последних версиях?
- У вас нет контроля над используемой версией jQuery. Таким образом, вы не можете гарантировать поддержку определенных браузеров и не можете заставить RSA использовать последнюю версию. Это ограничивает функциональность вашего кода. И это именно то, что здесь произошло. Вы использовали jQuery, и он не работал с IE9. Будет ли это работать с IE11? А что будет после обновления Archer с последним патчем?
- Имейте в виду, что код, который вы пишете, должен работать с другими 10k+ строками кода JavaScript, уже загруженными Archer на страницу. Поэтому сохраняйте свой пользовательский объект как можно более простым и старайтесь не использовать какие-либо внешние библиотеки. Это все о поддержке (если вы не находитесь там в течение 1 месяца и не планируете поддерживать ваш код).
Резюме
- Не скрывайте кнопки "Удалить" в RSA Archer, но измените дизайн защиты. Вы пожалеете о решении скрыть кнопку "Удалить" в долгосрочной перспективе. Однажды пользователь действительно удалит запись, и вы почувствуете боль.
- Используйте принцип KISS - используйте простой код JavaScript, избегайте библиотек, делайте пользовательские объекты короткими. Избегайте пользовательских объектов, когда это возможно. Или вам придется проверять их каждый раз при обновлении платформы.
Удачи, user3728843!
@StanUteski делает несколько замечательных замечаний и предлагает действительно хорошие передовые практики.
Также помните, что если пользователь использует странный браузер, такой как Safari, для основных функций, вы все равно получите странные результаты.
Кроме того, в браузерах JavaScript может быть отключен случайно.
Теперь вы, возможно, говорите, что это не имеет смысла, "... потому что мои пользователи знают, что Archer будет работать только с" 123 "версиями браузеров ABC" - но в этом суть, даже если они являются лучшими пользователями в мире и полностью осознают, что вы не можете контролировать, какой браузер они используют, используют ли они планшет или мобильный телефон, или если страница загружается странно и не загружает полностью скрипт / правильно библиотека - даже если страница не отображается, вы все равно можете открыть кнопку в этом случае и создать возможность для пользователя, щелкающего и удаляющего запись.
Во всех случаях вы хотите придерживаться парадигмы программирования MVC (Model-View-Controller) или MVVM (Model-View-View-Model) для веб-приложений, где CONTROLLER находится на стороне сервера и контролирует приложения ". Функциональный поток и характеристики "- например, страница со списком политик имеет следующие кнопки, которые ведут к соответствующим страницам:
- добавлять
- редактировать
- удалять
Эти кнопки и то, куда они ведут, затем дополнительно ограничиваются с помощью пользовательских ролей и разрешений (что на самом деле является функцией РАЗНОГО контроллера - в основном подсистемой контроллера доступа и управления правами).
Это приводит к:
- легче понять поток приложений с высокого уровня
- позволяет приложению быть продуманным, спроектированным, пройденным, с точки зрения бизнеса и процесса:
то, что может И должно быть сделано, прежде чем даже коснуться системы разработки
- Персоны пользователей, представляющие совокупность пользователей, которую вы переводите в роли
- Используйте случаи для всех персон / ролей, которые позволят вам определить для каждой из ролей:
- Подмножество данных, на которые можно воздействовать
- Фактическая функциональность / действия, которые могут быть предприняты
- Следующие шаги и решения от каждой точки внутри потока, в зависимости от ограничений, наложенных #1 и #2.
Каркас для определения:
- Элементы пользовательского интерфейса, необходимые для включения функциональности, действий и направленного потока, которые были определены для каждого шага и шлюза принятия решения в процессе.
- Оптимальное размещение этих элементов интерфейса для включения:
- Быстрая очистка информации
- Наиболее эффективный / простой способ выполнения действий (наименьшее количество кликов, переключатели вместо выпадающих меню, когда доступно только несколько вариантов, например, Да / Нет, Правда / Ложь)
- Эстетически приятный вид
- Гибкий и отзывчивый дисплей
- Отзывчивый и информативный пользовательский намек и подсказка, например:
- ошибки
- обязательные поля
- неактивные кнопки
- Возможно, даже настраиваемые пользователем темы
Просмотр доступности:
- число
- расположение
- видимость
- государство
Из основной рабочей "экранной" области пользовательского интерфейса, например:
- панели
- страницы
И как они представлены, используя такие механизмы, как
- ползунки
- вкладки
Хороший вид основан на эффективности и самодокументированности, поскольку он спроектирован так, чтобы быть интуитивно понятным с точки зрения того, что пользователь:
- пользователь должен видеть сейчас
- пользователь может видеть дальше
- как можно увидеть связанную информацию и дать ей правильное количество приоритетов и недвижимости
- когда и как обменивать видимость на доступность
- делать дальше, делать вкладки и т. д.
Наконец, вы можете перейти к реализации: которая затем...
- дизайн модели данных, который затем приводит к...
Кодирование контроллера: что в случае с Арчером заключается в:
- Application Builder и как вы настраиваете свои отношения, разрешения и действия
любые пользовательские поля CALCULATED (которые представляют собой код / конструкции контроллера на стороне сервера) - воспринимайте это как более ограниченную версию фактического кодирования страниц ASP.
- В других веб-приложениях вы можете делать это на PHP, JSP, Ruby/Rails и т. Д.
- Но, поскольку Archer действительно ближе к 5GL / Специфичный домен - Средство разработки приложений / Среда и среда выполнения (на самом деле это не фреймворк, как они утверждают), вы ограничены:
- Элементы представления данных (GUI)
- логические блоки (вычисляемые поля)
- и конструкции данных (таблицы, уровни и т. д.), которые мы находим в Application Builder (за исключением, конечно, пользовательских объектов, которые являются более новым элементом)
- просматривать дизайн и кодирование: хотя в случае Archer ожидается, что вы будете использовать встроенные, инкапсулированные объекты GUI/ представления (такие как сетки, раскрывающиеся списки параметров, меню и т. д.) вместо (редких случаев, когда вы могли бы Завершение пользовательского кодирования в JavaScript - элементы клиентской части /views).
Всегда сохраняя вещи разделенными так, вы будете:
- Разрешить для хорошего разделения труда / обязанностей
- позволит вам сделать больше быстрее / параллельно
- приводит к удешевлению затрат на рабочую силу, поскольку различные наборы навыков могут использоваться для:
- процесс
- моделирование данных
- контроллер
- Посмотреть
- и т.п.
- Сделайте ваши заявки:
- более надежный
- более понятно
- проще устранять неисправности / отлаживать
- проще в обслуживании / обновлении
- быстрее создавать дополнительные функции и возможности для
- более портативный
- более модульный и многоразовый
Лучшие практики проектирования и разработки
- поручить деловому человеку / кому-либо в офисе CISO отвечать за сбор и разработку потока бизнес-процессов:
- захватить то, что существует не на бумаге и / или в устаревших системах:
- во что они хотели бы превратиться (конечное состояние)
- попросите системного аналитика преобразовать поток бизнес-процессов в поток функциональных приложений, который имеет смысл для всего Archer:
- фреймворк
- модули
- доступные входы и выходы данных
- функции
- Попросите основного разработчика Archer реализовать функциональное проектирование этого приложения (в следующем порядке):
- модель данных
- затем контроллеры, используя (в следующем порядке - наиболее ограничивающий [и ближайший к данным] к наименее ограничивающий [дальше от данных])
- роли и разрешения
- фильтры поиска
- форма действий
- рассчитанные поля
- пользовательский код (в крайнем случае)
- Наконец, представление (которое в Archer действительно выполняется с использованием того же инструмента - Application Builder.
- Вы можете выбирать и размещать поля, фильтры поиска, расчетную логику и т. Д., Которые вам нужны в первую очередь для построения контроллера / функциональности - входов / выходов.
- Затем, после этого, работа над видом, с точки зрения:
- Куда элементы должны идти на странице / форме
- Как они должны выглядеть:
- форматирование
- выравнивание
- всплывающие подсказки
- Пользовательский GUI / UX навороты
$(document).ready(function(){
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').hide();
});
ИЛИ ЖЕ
$(document).ready(function(){
$('#master_DefaultContent_rts_s2487_f6881srvgrid_ctl00 .GridRemoveImage').css("display", "none");
});