2009-08-26 3 views
1

У меня есть ссылка и при нажатии ссылки Я хочу установить значение переменной флага в 1. Возможно ли это? КакМогу ли я установить значение в функции onclick?

<a id='ctr' href='#' onclick='flag=1'> Hello </a>  

А также, как написать функцию для события OnClick на той же линии, как и вместо

<a id='ctr' href='#' onclick='call_this();'> Hello </a> 
function call_this(){ 
    flag=1; 
} 

я могу иметь функцию call_this в самой OnClick линии?

EDIT2

Теперь у меня есть код, подобный этому. Внутри события onclick значение хранится в $ selectedId правильно. Но когда я пытаюсь передать это значение в URL-адресе, я не получаю правильное значение. Последнее значение в цикле for передается.

<script type="text/javascript"> 

$(document).ready(function(){ 

<?php foreach ($Forms as $r): ?> 

    $("<a id='<?php echo $ctr['Form']['id'];?> href='#' onclick='flag=1'> Hello </a>").appendTo("#header").click(function(){ 
    <?php $selectedId=$r['Form']['id'];?> 
    alert("selId: "+<?php echo $selectedId;?>);//here the selected value is echoed 
}); 
</script> 

<a href="http://localhost/Example/new/export?height=220&width=350&id=<?php echo $selectedId;?>" class="thickbox button" title= "Export" >Export</a> 

здесь id передается как 4, что является последним значением в цикле php for.

+0

Вы действительно должны поменять свое использование «и», чтобы разрешить правильный синтаксис атрибута attributename = «атрибут-значение». Вместо

ответ

0

Да, вы можете установить флаг в OnClick (но этот флаг должен быть глобальным)

<script>var flag=null;</script> 
<a id='ctr' href='#' onclick='flag=1'> Hello </a> 

и да, вы можете определить функцию инлайн.

<a id='ctr' href='#' onclick='function call_this(){flag=1;};call_this();'> Hello </a> 

Но я должен предупредить вас, что это неправильный дизайн. Лучше иметь все javascript в js-файлах. И настройте только обработчики.

0

Вы можете иметь оба JS-кода в свойстве onclick элементов, но обычно это уродливое решение, и вам следует избегать его. Лучше поместить все ваши сценарии JS в отдельный блок или отдельный файл и вызвать его оттуда.

8

Поскольку у вас есть идентификатор вашего элемента привязки, вы можете легко найти его и связать событие.

Если это простое действие, вы можете использовать анонимную функцию, вместо того, чтобы объявить функцию глобального масштаба:

window.onload = function() { 

    // Bind events... 

    document.getElementById('ctr').onclick = function() { 
    flag1 = 1; 
    return false; // stop the browser from following the link 
    }; 

    // .... 
}; 

Edit: Глядя на ваши редактирования, JQuery document.ready событие срабатывает при загрузке страницы, в это время у вас еще есть флаг null.

Обратите внимание, что вы добавляете только элемент привязки в DOM, а затем выполняете оператор if.

Поскольку вы используете JQuery вы можете использовать его, чтобы связать click события вновь созданный элемент:

var flag=null; 

$(document).ready(function(){ 
    $('<a id="ctr" href="#"> Hello </a>').appendTo('#header').click(function() { 
    flag = 1; 
    e.preventDefault(); // stop the browser from following the link 
    }); 
}); 

Вы можете сделать это, так как функция appendTo возвращает вновь созданный DOM-элемент, и вы можете связать события прямо к нему.

+1

шесть ответов и только один, который знает, о чем они говорят. +1 –

+0

Это вызовет проблему, однако если она выполнена до того, как «ctr» будет полностью загружена. чтобы связать функцию с событием window.onload и выполнить этот код внутри него. –

+0

@James: согласен, отредактирован ... – CMS

1

Да и да.

Для проверки # 1, я добавил предупреждение, как это:

<a id='ctr' href='#' onclick='flag=1; alert(flag);'>Hello</a> 

Чтобы проверить номер # 2, я добавил предупреждение, а также:

<a id='ctr' href='#' onclick='function call_this() { flag=1; alert(flag); } call_this();'>Hello</a> 
2

Да, с небольшой корректировкой он должен Работа. Но вы должны знать, что наилучшей практикой использования javascript является ВСЕ ваш javascript во внешнем файле. Это позволяет вашему html «очистить», упрощает редактирование и дает лучший обзор того, что происходит.

содержимое файла my.html:

<html> 
    <head> 
     <title>hello :-)</title> 
     <script language="javascript" src="my.js" type="text/javascript"></script> 
    </head> 
<body> 
    <a href="#" id="ctr">Set var value</a><br /> 
    <a href="#" id="check">Check var value</a> 
</body> 
</html> 

Содержимое файла my.js:

var flag = 0; 

function init() 
{ 
    var ctr_element = document.getElementById('ctr'); 
    ctr_element.onclick = function() 
    { 
     flag = 1; 
     return false; 
    } 

    var check_element = document.getElementById('check'); 
    check_element.onclick = function() 
    { 
     alert(flag); 
     return false; 
    } 
} 

window.onload = init; 

PS. Еще лучшей практикой было бы использование класса, поэтому у вас меньше риска случайной перезаписи ваших переменных. (особенно при использовании библиотек 3-й части и т. д.). Но я рекомендую вам оставить это на другой день, когда вы достаточно уверены в своих навыках.

Если вам интересно писать как совместимый с кроссбраузером код, вы можете захотеть взглянуть на библиотеки, такие как прототип, jquery или dojo. (их больше) Они намного упрощают вашу жизнь js :-)