2011-12-22 3 views
0
function test() { 
    var id = 123; 
    var id12 = 'abcd'; 
    var childDiv = ""; 
    childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>'; 

    $("#mydiv").append(childDiv); 

} 

function newsClicked(param) { 
    alert(param); 
} 

Выше тестовой функции test() - это функция, которую я вызываю внутри события onClick тестового div. Если я передаю идентификатор, который является числом (целое число), он работает. Если я передаю строку , это говорит об ошибке ссылки. Я думаю, что это связано с закрытием. Как это решить. Что происходит на самом деле здесь?Ошибка передачи функции javascript

ответ

2

Изменение:

childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>'; 

в

childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>'; 

Когда вы добавляете childDiv 1-ый в Div с целым в качестве параметра результат будет:

<div style="width:20px;height:20px" onclick="newsClicked(3)">Click</div> 

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

<div style="width:20px;height:20px" onclick="newsClicked(string_as_arg)">Click</div> 

Это не нормально, потому что string_as_arg не является переменной, которая, наконец, не входит в сферу действия. Вот почему вы должны заключить его в апострофы. Тогда соответствующие результаты будут:

<div style="width:20px;height:20px" onclick="newsClicked('3')">Click</div> 
<div style="width:20px;height:20px" onclick="newsClicked('string_as_arg')">Click</div> 

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

+0

Спасибо, получил это работает, но я не понял, что именно проблема, чтобы передать в качестве параметра строки, нам нужно, чтобы избежать его, почему? – sat

+0

@sat, проверьте мое редактирование. Я добавил объяснение. –

+0

@sat вы передаете это как строку, но только для конкатенации другой инструкции кода, которая будет выполнена позже. –

1

Его рабочие, когда вы передаете number потому что number не должно быть в quotes но string должен быть в quotes. так передать строку, которую вы должны использовать escape CHAR "\"

что-то вроде:

newsClicked(\''+id12+'\') 
1

на вас вопросам,

Как решить эту проблему.

* Примечание: вы можете увидеть, как \''+id12+'\' на ниже код

function test() { 
    var id = 123; 
    var id12 = 'abcd'; 
    var childDiv = ""; 
    childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>'; 

    $("#mydiv").append(childDiv); 

} 

function newsClicked(param) { 
    alert(param); 
} 

Что происходит на самом деле здесь?

функция newsClicked будет уволена после DIV щелкнула, который недавно добавил к йот, Он будет добавлен в Dóm как

<div onclick="newsClicked(abcd)" style="width: 20px; height: 20px;">Click</div> 

здесь, ABCD является использование как переменные, но не существует на реальном.

И вы получите ошибку, как

ABCD не определен

, но если вы поставите ID переменную, которая является целым числом, оно добавит на йот как

<div onclick="newsClicked(123)" style="width: 20px; height:20px;">Click</div> 

который полностью корректен по синтаксису.

Думаю, вы сейчас это поняли.

Приветствия,

+0

ok, поэтому, если целое число передано, оно принимает значение, а не переменную, вот почему оно работает! Уф! – sat

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