Обучаю битриксу программистов, интеграторов

Bitrix JS. Шпаргалка

Другие статьи по bx
Проверка на непустую строку
BX.type.isNotEmptyString(str);

Вставить содержимое в узел
BX("elemId").innerHTML = 'texthtml'; //вариант 1
BX.adjust(BX("elemId"), {html: '<span>текст</span>'}); //вариант2
Установка значения
BX("elemId").value = 'value'; 
Очистка контента
BX.cleanNode(BX("elemId"));

установка атрибутов
BX("elemId").setAttribute("src",pathSrc);
BX("elemId").getAttribute("src");
работа с классами
BX.addClass(BX("elemId"), 'className');
BX.removeClass(BX("elemId"), 'className');
BX.toggleClass(BX("elemId"), ["arrowUp", "arrowDown"]);
BX.hasClass(BX("elemId"), 'className');
добавить
BX.append(BX.create('span', {text: 'someText'}),BX('elemId'));
удалить
BX.remove(BX("elemId"));
показать-скрыть
BX.show(BX("elemId"));
BX.hide(BX("elemId"));
поиск
var fields = BX.findChild(BX(elemId), {class: 'className'}, true, true);
fields.forEach(function(element){
   console.log(element);
});


on click
//jquery
$(document).ready(function(){
   $(document).on('click','.myClass',function(e){
       //тут обработчик
      e.preventDefault();
   });
});
//bx
BX.ready(function(){
   BX.bindDelegate(
      document.body, 'click', {className: 'myClass' },
      function(e){
         if(!e) {
            e = window.event;
         }
         //тут обработчик
         return BX.PreventDefault(e);
      }
   );
});
Календарь
https://dev.1c-bitrix.ru/api_help/js_lib/data/calendar.php
//php
CJSCore::Init(array("date"));
<input type="text" value="03.02.2015" name="date" onclick="BX.calendar({node: this, field: this, bTime: false});">

Маска на телефон
//php 
CJSCore::Init(array('masked_input'));
//js
var phoneVal =  BX('orderInputPhone').value; //в value номер, из предыдущего заказа, например
var phoneMasked = new BX.MaskedInput({
        mask: '+7 999 999 9999', // устанавливаем маску
        input: BX('orderInputPhone'),
        placeholder: '_' // символ замены +7 ___ ___ __ __
}); 
if(phoneVal != ''){   
       phoneVal = phoneVal.replace(/[^\d]/g,"").trim();  //убираем все нечисла
       phoneMasked.setValue(phoneVal.substring(phoneVal.length, (phoneVal.length-10))); // устанавливаем значение без первой 7
}

//проверка на валидность телефона
if($('#orderInputPhone').val() == "" || $('#orderInputPhone').val().indexOf('_')!=-1){         
   err = "Проверьте на корректность телефон.";
}
ajax пример
//php 
CJSCore::Init(array('ajax'));
//js
var postData = {               
  'sessid': BX.bitrix_sessid(),
  'site_id': BX.message('SITE_ID'),
  'action': 'add',
  'id': offersId,
  'quantity': 1,
};
BX.ajax({
   url: '/ajax/file.php',
   method: 'POST',
   data: postData,
   dataType: 'json',
   onsuccess: function(result){      
      
   },
   onfailure: function(result){
      
   } 
});
//file.php

define("STOP_STATISTICS", true);
if (array_key_exists('site_id', $_REQUEST) && is_string($_REQUEST['site_id'])){
   $siteId = $_REQUEST['site_id'];
   if($siteId !== '' && preg_match('/^[a-z0-9_]{2}$/i', $siteId) === 1){
      define('SITE_ID', $siteId);
   }
}

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

//подключаем нужные модули
use Bitrix\Main\Loader,
   Bitrix\Main\Application,
   Bitrix\Currency,
   Bitrix\Sale\DiscountCouponsManager;

Loader::includeModule('iblock');
Loader::includeModule('sale');
Loader::includeModule('catalog');
CUtil::JSPostUnescape();

if (!check_bitrix_sessid() || $_SERVER["REQUEST_METHOD"] != "POST") return;

$arRes = array();

if (isset($_POST["action"]) && strlen($_POST["action"]) > 0){
   $arRes = 'hello world';
}
$APPLICATION->RestartBuffer();
header('Content-Type: application/json; charset='.LANG_CHARSET);   
echo CUtil::PhpToJSObject($arRes); 
//иногда коряво работает можно использовать, смотрите консоль
//echo json_encode($arRes);
die();
модалка
php
<?CJSCore::Init(array("popup"));
?>
<a href="#" class="btn btn-partner nano-modal" data-validate='true' data-title='Request form' data-content='<?=$formContent?>'>Send a Request</a>


js
function nano__modal(container,settings,callback) {
   var modal = BX.PopupWindowManager.create(container, null, settings);
   return modal;
}

function setModal() {   
   var el = this;
   el.title = ''
   if(el.dataset.title){
      el.title = el.dataset.title
   }
   el.content = ''
   if(el.dataset.content){
      el.content = el.dataset.content
   }
   let className = '';
   if(el.dataset.class){
      className = el.dataset.class
   }
   let eventsPopup = {
         onAfterPopupShow: (el.dataset.validate)? validatePopUp: function(){},
         onPopupShow: function(){            
            $('body').addClass('popupShow');
         },
         onPopupClose: function(){           
            $('body').removeClass('popupShow');
         }
   }


   var modal = nano__modal(window.body, {
      autoHide: false,
      lightShadow: true,
      closeIcon: true,
      closeByEsc: true,
      className:className,
      titleBar: {content: BX.create('h3', {html: el.title, 'props': {'className': 'text-center'}})},
      overlay: {   backgroundColor: 'transparent', opacity: '0'},
      events: eventsPopup
   });

   modal.setContent(el.content);
   modal.show();

}

$(document).ready(function(){
   $('.nano-modal').on('click',function(e){   
        e.preventDefault();
   });
   $('.nano-modal').on('click',setModal);
   $(document).on('click','.popup-window-overlay',function(){   
        $('.popup-window-close-icon').trigger("click");
   });   
});


Подключить jquery через битрикс
php
\CJSCore::init(array("jquery"));

Подключить свою библиотеку через Битрикс
дока битрикса https://dev.1c-bitrix.ru/api_help/js_lib/my_extension/index.php

Не используйте в названиях своих библиотек символы не подходящие под регулярное выражение /[^a-z0-9_]/i  (например дефис).
php
например. в init.php, чтобы 1 раз для всего сайта
$arJsConfig = [
  'myJsLibrary1' => [    
     'js' => 'my1.js',    
     'css' => 'my1.css',   
     'rel' =>[],   
   ],
  'myJsLibrary2' => [    
     'js' => 'my2.js',    
     'css' => 'my2.css',   
     'rel' =>['jquery'],   
  ]
];

foreach ($arJsConfig as $nameExt => $arExt) {  
 \CJSCore::RegisterExt($nameExt, $arExt);
}
 php
а затем подключать на нужной странице
CJSCore::Init(array("myJsLibrary1"));

if(CJSCore::IsExtRegistered('myJsLibrary1')){
   echo 'Y';
}

События
Получение списка всех событий в системе

В файле /bitrix/js/main/core/core.js

старый вариант

находим: BX.onCustomEvent(eventObject, eventName, arEventParams, secureParams);

Вставим в его исполнение логирование:

console.log(eventName, arEventParams);

новый вариант

 value: function emit(eventName, event) {
      console.log(eventName, event); //тут логируем       
      EventEmitter.emit(this, eventName, event);
      return this;
} 

После этого при совершении различных действий на клиенте (клики, push-информации, открытии popup) в лог будут писаться коды событий. Вам останется подобрать нужное.

добавить обработчик на мое событие  

BX.addCustomEvent('onMyEvent',function () {

});

Вызываем событие.  
BX.fireEvent(BX('elementId'),'change');
BX.onCustomEvent('onMyEvent');
Чтобы пересчиталась корзина, например, после добавления товара.
 BX.onCustomEvent('OnBasketChange');      
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!