indenger20

Рейтинг
38
Регистрация
07.03.2015
Brand from Amber:
Так вот я и спросил как бы в начале: что быстрее

В вашем случае разницы заметно не будет. До тех пор, пока на странице не будет миллион элементов которым нужно менять стили/перемещать js-ом. (и в вашем примере условие будет выполняться очень часто, если ширину окна браузера менять, а это не правильно )

В общем как уже сказал, все что можно через css делать, лучше делать именно через него (в том числе и уменьшается вероятность багов.)

-----------

Мемори:

Имхо, также сами коды манипуляции DOM написны на C++ и значит имеют почти максимальное быстродействие,
JS это обертка на вызовами функций которые написаны на C++ (смотрим исходники Лисы и Хрома).
То есть продуманная струтура программ на JS с минимум циклов и тд даст весьма высокое быстродействие.

Я за методы ничего не говорил, я говорю за сам DOM, он тугой.

Так как когда создавался, то никто не думал, что сайты будут динамические, и манипулировать с ним будут.

На самом деле, все что можно сделать через css, нужно делать css-ом.

js только на крайний случай (перенос блока куда-нибудь)

Так как работа с DOM деревом очень ресурсоемкая, а это лишняя нагрузка.

Да и править/читать проще css.

Спасибо за отзыв.

Продолжаю работать.

Точно обьявили эту переменную в глобальной области?

и в каком методе ошибку бьет?

я понял, так ui - это не глобальная переменная

мы с метода close не видим ее, так как в методе select это параметр

вы можете создать дополнительную переменную

Пример кода:


var flag = false;
jQuery(\"#city\").autocomplete({



source: function(request,response) {
jQuery.ajax({
url: \"https://api.cdek.ru/city/getListByTerm/jsonp.php?callback=?\",
dataType: \"jsonp\",
data: {


q: function () { return jQuery(\"#city\").val() },
name_startsWith: function () { return jQuery(\"#city\").val() }
},
success: function(data) {
flag = false;
response(jQuery.map(data.geonames, function(item) {
return {
label: item.cityName,
id: item.id,
postCodeArray: item.postCodeArray


}
}));
}
});
},
minLength: 1,



select: function(event,ui) {



flag = true;
jQuery('#receiverCityId').val(ui.item.id);



},

close: function(request,response) {

if(!flag){
return alert('error');
}else {
//code
}



}


});

вроде бы как-то так

А где это ui обьявлено вообще?

скиньте полностью функцию эту

может ui вообще нету, поэтому то и ошибка


close: function(request,response) {
var ui; //добавьте
if(ui == 'undefined'){
return alert('error');
};
if(ui.item.id){

}

http://prntscr.com/gv4bsy это уберите

если будет ошибка, то мы попадаем в "catch"

а вообще, если ошибку вызывает

if(ui.item.id){

то почему вы внутри условия делаете проверку?

нужно ведь до этого условия


if(ui == 'undefined'){
return alert('error');
};
if(ui.item.id){
//code
}

Попробуйте этим споcобом:

try {

// ваш код

} catch(e) {

// попадем сюда, если произошла ошибка

alert('error');

}

---------------------------

Может вы даже http://prntscr.com/gv471x в это условие не попадаете ?

Не проверял, но думаю, что должно работать.



function createCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca;
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

function eraseCookie(name) {
createCookie(name,"",-1);
}


$('.city').on('click', function(e) {
$('.city-choose').addClass('active');
e.preventDefault();
});
$('.city-choose li').on('click', function(e) {
var some = $(this).data('some'); //
var val = $(this).data('val');
var all = $(this).data('all');
$('.phones .tel').attr('href', 'tel:'+all).empty().apped('<span>'+some+'<span> '+val);
$('.city').text( $(this).text() );
$('.city-choose').removeClass('active');
if( !readCookie('city') ) {
createCookie('city', $(this).text()+'&'+all, 1);
}else {
eraseCookie('city');
createCookie('city', $(this).text()+'&'+all, 1);
}
e.preventDefault();
});
$('.city-choose .close').on('click', function(e) {
$('.city-choose').removeClass('active');

e.preventDefault();
})


.city-choose {
display: none;
&.active {
display: block;
}
}

ну и нужно дата атрибуты заполнить для телефонов. По js коду видно где и какие атрибуты http://prntscr.com/guoh22

https://jsfiddle.net/3ndxgtqz/

Наверное как-то так.

Всего: 248