1

我有一个链接,单击链接时我想将标志变量的值设置为 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 函数吗?

编辑2

现在我有这样的代码。在 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 循环中的最后一个值。

4

6 回答 6

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,您可以使用它将点击事件绑定到新创建的元素:

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 元素,并且您可以直接将事件绑定到它。

于 2009-08-26T06:18:46.847 回答
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 生活变得更加轻松 :-)

于 2009-08-26T06:42:05.677 回答
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>
于 2009-08-26T06:19:37.500 回答
0

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

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

于 2009-08-26T06:15:27.947 回答
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。并且只设置处理程序。

于 2009-08-26T06:15:46.790 回答
0

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

于 2009-08-26T06:16:17.337 回答