A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::open($save_path, $name) should either be compatible with SessionHandlerInterface::open(string $path, string $name): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 132

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::close() should either be compatible with SessionHandlerInterface::close(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 290

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::read($session_id) should either be compatible with SessionHandlerInterface::read(string $id): string|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 164

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::write($session_id, $session_data) should either be compatible with SessionHandlerInterface::write(string $id, string $data): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 233

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::destroy($session_id) should either be compatible with SessionHandlerInterface::destroy(string $id): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 313

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: Return type of CI_Session_files_driver::gc($maxlifetime) should either be compatible with SessionHandlerInterface::gc(int $max_lifetime): int|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Filename: drivers/Session_files_driver.php

Line Number: 354

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_cookie_params(): Session cookie parameters cannot be changed after headers have already been sent

Filename: Session/Session.php

Line Number: 296

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Session ini settings cannot be changed after headers have already been sent

Filename: drivers/Session_files_driver.php

Line Number: 108

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_save_handler(): Session save handler cannot be changed after headers have already been sent

Filename: Session/Session.php

Line Number: 110

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_start(): Session cannot be started after headers have already been sent

Filename: Session/Session.php

Line Number: 143

Backtrace:

File: /home2/umernaze/public_html/coderanks/application/controllers/Article.php
Line: 7
Function: __construct

File: /home2/umernaze/public_html/coderanks/index.php
Line: 317
Function: require_once

Logo
Code Ranks ×

Jquery Best Practices

22/06/2019  .   3 minutes, 54 seconds to read  .   Posted by Admin
#best-practices #Jquery

jQuery is an open-source javascript library used for manipulation, event handling, and ajax. Its API is very easy to use.

1. Checking The DOM Has Loaded

In most Holiday Extras projects we favor loading jQuery asynchronously so there should be no need to check for the DOM. However, in some cases, you may still need to, for example creating a custom plugin. The best way to check the DOM has loaded in this instance is to use an immediately invoked function.

Bad
$(document).ready(function(){ 
    // DOM is ready 
});
Good
(function(init) { 
init(window.jQuery, window, document);
 }
   (function($, window, document) { 
   $(function() 
   { 
    // DOM is ready 
   }); 
}));

2. jQuery Objects

Cache jQuery Objects When Repeating

If you plan to repeatedly use a jQuery object, for example, if it's called within an event or for loop, then cache it in a variable.

Prefix your variable with a $ to denote it as a jquery object.

Bad
$('a').on('click', function(){ 
   $('div').append('a'); 
});
Good
var $div = $('div'); 
$('a').on('click', function(){ 
   $div.append('a'); 
});

3. Chain When Possible

Most jQuery methods will return the current object allowing you to chain them, which you should. In single-use cases this will negate the need to cache the object. Separating each method onto an individual line and indenting will make it easier to read.

Bad
var $div = $('div'); 
       $div.addClass('a-class'); 
       $div.height('22px'); 
       $div.css('color','#'); 
       $div.removeClass('another-class'); 
       $div.show();
Good
$('div') 
   .addClass('a-class') 
   .height('22px') .css('color','#') 
   .removeClass('another-class') .show();

When traversing the DOM however it is best to break the chain.

Bad
$('div') .children('a-class') 
   .hide() 
   .parent() 
   .children('b-class') 
   .css('color','#');
Good
var $div = $('div'); 
$div .children('a-class') .hide(); 
$div .children('b-class') .css('color','#');

4. Selectors

Use Simple Selectors

Pick simple selectors as these will be easier to read and relate to native JavaScript functions.

Bad
$('.wrapper span.my-element').text();
Good
$('.my-element').text();

5. IDs Are King

When it comes to simple selectors, using an ID e.g. $('#my-id') is the simplest and best way to select a unique element as it will defer to document.getElementByID.

Using a tag e.g. $('div') will defer to getElementsByTagName but this is ambiguous and should only be used when selecting children or descendants of another object.

Using a class e.g. $('.my-class') is the least favored option of the three. Though it will defer to getElementsByClassName this is not supported in all older browsers.

6. Navigating The DOM

When traversing the DOM, where possible it is best to start with an ID and work your way up/down using .children().find().parent() etc.

This will improve performance when navigating through dependant, especially in older browsers that don't natively support getElementsByClassName.

It will also help to ensure the use of simple selectors and works best when the parent object is stored in a variable.

 Bad
$('#wrapper > .child').css({ color: '#fff' }); 
$('#wrapper .descendant').css({ color: '#f00' });
Good
var $wrapper = $('#wrapper'); 
$wrapper 
   .children('.child') 
   .css({ color: '#fff' }); 
$wrapper 
   .find('.descendant') 
   .css({ color: '#f00' });

7. Events

Use .on() And .off()

These old methods bindlive and delegate along with the individual event methods, such as clicksubmitetc, should not be used to bind events.

Instead, use the on and methods.

$('#my-link').on('click',function()
{ 
    // my special function 
}); 
$('#my-link').off('click');

 Multiple Events When attaching multiple events it is better to pass in an object.

Bad
$('div').on('mouseenter',function(){
   // mouseenter action 
}); 
$('div').on('mouseleave',function(){
   // mouseleave action 
});
Good
$('div').on({ 
   'mouseenter': function(){
     // mouseenter action }, 
   'mouseleave': function(){
    // mouseleave action } 
});

8. Delegate Where Possible

When attaching a single event handler to many elements it is more efficient to attach it to a parent, preferably using an id, and delegate to the child/descendant. When the event propagates up to the parent the handler will then be called on the eventTarget.

Bad
$('#my-list li').on('click',function(){ 
   // my event 
});
Good
$('#my-list').on('click','li',function(){ 
   // my event 
});

9. Namespace For More Complex Functions

In more complex applications where you may be attaching/detaching many events, you should namespace the event but using a full stop after the event name. E.g. mouseover.my-event

Bad
$('a').on('click',function(){ 
    // first event handler 
}); 
$('a').on('click',function(){ 
    // second event handler 
}); 
// This will remove all click events attached to the link 
$('a').off('click');
Good
$('a').on('click.first',function(){ 
   // first event handler 
}); 
$('a').on('click.second',function(){ 
  // second event handler 
}); 
// This will remove only the first handler 
$('a').off('click.first');