используя href для вызова функции JavaScript с параметром - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь вызвать функцию javascript из href.функция имеет параметр, который будет извлечен функцией eval.Но возникает какая-то ошибка.

script:

function rate(id) {

            // do something
        }

тег, который будет вызывать функцию:

<a href="javascript:rate(" + <%#Eval("ID")%> + ")" >rate</a>

Чего мне не хватает?

Ответы [ 4 ]

6 голосов
/ 22 июля 2011

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

Если <%#Eval("ID")%> просто выдает INT, это должно работать:

<a href="javascript:rate( <%#Eval("ID")%> )" >rate</a>

Если это строка,

<a href="javascript:rate( '<%#Eval("ID")%>' )" >rate</a>

должна сделать это за вас, хотя вам нужно разобраться со случаем <%#Eval("ID")%>, создающим что-либо с одной кавычкой в ​​нем.

A Урок:

Я говорю, что вы не должны делать это так, потому что псевдопротокол javascript (javascript:) несуществен и неправильный.В худшем случае вы должны использовать onclick, который возвращает false.В идеале вы должны назначать событие программно и предотвращать действие объекта события по умолчанию.

4 голосов
/ 22 июля 2011

Вы не должны использовать " + + ", потому что он просто будет заменен числом:

<a href="javascript:rate(<%#Eval("ID")%>)">rate</a>
3 голосов
/ 22 июля 2011

Зачем называть это href?Вы можете просто сделать кнопку и оформить ее как ссылку.Это было бы намного проще

<button id = "myButton" onclick = "rate(<%#Eval("ID")%>)" >rate</button>

#myButton
{
  border: none;
  padding: none;
  background-color: transparent;
}
2 голосов
/ 22 июля 2011

Я вообще не вижу необходимости в использовании eval (). Код в кавычках, как это, оценивается в области верхнего уровня. Если вы убедитесь, что в этой области верхнего уровня определены как скорость, так и идентификатор, тогда он будет работать без eval () с этим HTML:

<a href="#" onclick="rate(ID);">rate</a>

и этот код:

var ID = 3;

function rate(id) {
    alert(id);
    return(false);
}

Вы можете увидеть, как это работает здесь: http://jsfiddle.net/jfriend00/bqqpM/. Хитрость в том, чтобы сделать эту работу без eval, просто убедиться, что ID и скорость доступны в области верхнего уровня.

...