我可以在onclick函数中设置一个值吗?

时间:2009-08-26 06:12:24

标签: javascript jquery onclick

我有一个链接,点击链接我想将一个标志变量的值设置为1.这可能吗?喜欢

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

还有如何在同一行上编写onclick事件的函数,而不是

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

我可以在onclick行中使用call_this函数吗?

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循环中的最后一个值。

6 个答案:

答案 0 :(得分:8)

由于您的锚元素上有ID,因此您可以轻松找到它并绑定事件。

如果这是一个简单的动作,你可以使用匿名函数,而不必在全局范围内声明一个函数:

window.onload = function () {

  // Bind events...

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

  // ....
};

编辑:查看您的编辑时,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 :(得分:2)

是的,很少调整它应该工作。但是你应该知道使用javascript的最佳做法是在外部文件中使用 ALL 你的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部分库时)。 但是我建议你把它留给另一天,当你对自己的技能充满自信时。

如果您对编写crossbrowser兼容代码感兴趣,可能需要查看prototype,jquery或dojo等库。 (还有更多)他们让你的生活变得如此简单: - )

答案 2 :(得分: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>

答案 3 :(得分:0)

这是可能的,但这不是一个好主意。

在内联事件中散布代码会导致代码复杂且难以理解。

答案 4 :(得分: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>

但我必须警告你,这不是正确的设计。最好在js文件中包含所有javascript。并且只设置处理程序。

答案 5 :(得分:0)

你可以在元素onclick属性中同时拥有两个JS代码,但通常这是一个丑陋的解决方案,你应该避免它。最好将所有JS脚本放在单独的块或单独的文件中,然后从那里调用它。