2016-08-26 2 views
0

У меня есть смешной вопрос. Почему-то в браузере Safari Javascript Logic Gates работают неправильно. Вот разбивка:javascript не работает в сафари

Весь этот сценарий вызывается с $(#id).load(my/script.php) функцией

Я создаю чистый vairable.

$perm = $_POST['permission'].

создать HTML переменного

$html_content .= " <div id='bsid_$account_id' onclick="bsview(id)"></div>

Я присоединяюсь HTML-

<?=$html_content?> 

основания разрешения Ai изменение функциональности функции bsview я применяюсь в моих делах.

if ("<?=$perm?>" != "user"){ 
    function bsview(id) { 
    console.log('manager'); 
    } 
}else{ 
function bsview(id) { 
    console.log('user_view'); 
} 
} 

Затем происходит что-то смешное. После проверки в Chrome, IE и Firefox я подтверждаю, что код работает. Однако, когда я запускаю код в Safari, логический логический элемент, который должен возвращать «TRUE», это разрешение не равно «пользователю», а возвращает FALSE. Это код, отраженный в моей утилите отладки Safari.

if ("manager" !== "user"){ 
    console.log('manager'); 

    function bsview(id) { 
    console.log('manager'); 
    } 

}else{ 
    function bsview(id) { 
    console.log('user_view'); 

    } 
} 
</script> 

И, конечно, утешать Logs 'users_view'

Ok. Если у кого-то есть понимание или критика за мой дрянной код, пожалуйста, пошлите им свой путь. Я хотел бы знать, почему это происходит, и как избежать этого самого.

+0

Вы не можете условно определить объявления функций в JavaScript. Объявление функций добавляется в область содержимого, на которой определены оба ваших, но поскольку они имеют одно и то же имя, последнее имеет приоритет. Как показывает Barmar, вы можете использовать назначение функции. – jfriend00

ответ

2

Согласно

Function declarations inside if/else statements?

это не действует, чтобы поместить объявления функций внутри if/else. Вы должны объявить имя функции за пределами if, а затем назначить ей.

var bsview; 
if ("<?=$perm?>" != "user"){ 
    bsview = function (id) { 
    console.log('manager'); 
    } 
}else{ 
bsview = function (id) { 
    console.log('user_view'); 
} 
} 

Или вы могли бы упростить его:

function bsview(id) { 
    console.log('<?= $perm == "user" ? 'user_view' : 'manager' ?>'); 
} 
+0

Спасибо. Я решил, что мне придется это сделать. Я просто не знал, почему Сафари будет реагировать по-другому. Спасибо за помощь. –

Смежные вопросы