2011-04-30 81 views
1

我有一些我偶尔访问的网址,其中包含HREF中指定的页码。这些变化,我需要跟踪访问的最后一个。我一直在通过剪切粘贴到一个文本文件中,但想用本地HTML页面替换它,我可以使用javascript进行更新。下面是我创建了一个例子:Javascript HREF更新

<script type="application/javascript"> 
     function update(n,newvalue) { 
      var link = document.getElementById('l' + n); 
      var href = link.getAttribute('href', 2); 
      var textfield = document.getElementById('p' + n); 
      var parts = new Array(); 
      parts = href.split('-'); 
      parts[1] = 'p' + newvalue; 
      textfield.setAttribute('value', newvalue); 
      var newhref = parts.join('-'); 
      link.setAttribute('href',newhref); 
     } 
</script> 
<form> 
    <dl> 
     <dt><a target="_blank" id="l1" href="http://foobar.org/t5-p8-data.html">Task 5 Data<a></dt> 
     <dd>Page: <input type="text" id="p1" value="8" onChange="update(1,this.value)" /> </dd> 
    </dl> 
</form> 
    </html> 

当我在文本字段中输入一个新值和跟踪通过这个与萤火虫它似乎做工精细,即连结href中值和文本字段值在DOM得到改变,但是当函数退出时,它们会回到页面中的原始值。我究竟做错了什么?

+0

对于我在Fx4中工作 - 我会亲自使用onKeyUp而不是onchange – mplungjan 2011-04-30 16:35:29

+0

我认为正确的类型是'text/javascript' - 至少这就是基本上到处都是的。 – ThiefMaster 2011-04-30 16:39:29

+0

奇怪。我在Fx 3.6.17和IE 8中试用它,它的行为如前所述。什么可以解释这一点? – Steve 2011-04-30 16:41:22

回答

0

主要编辑:

的问题是创下单<input>输入表单标签内将提交表单,因此发生的事情是,你在输入类型,按回车键,这会导致blor,所以onchange事件触发,并在调试器中显示一切正常。完成后,页面将重新加载(因为默认表格action将GET当前页面)而不闪烁,重置输入值。

解决方案1:删除<form>标记。表单元素在这段代码中没有做任何有用的事情。

解决方案2:将onsubmit=return(false)属性添加到<form>

解决方案3:向表单添加另一个非隐藏输入。

+0

谢谢,但结果相同。还将脚本类型更改为text/javascript。我不明白为什么在脚本执行过程中它会在DOM中发生变化,但是这些变化在退出时不会保持不变。 – Steve 2011-04-30 18:34:02

+0

你确定该页面没有重新加载吗?是什么触发了变化,你是否通过按回车模糊了字段,如果是,JavaScript正在改变它,然后在'

'中的输入键按钮导致表单提交重新加载页面,因为默认'该表单的“action”是相同的页面。 – 2011-04-30 19:09:30

+0

是的,它似乎是重新加载页面。所以我改变了脚本,使其包含一个带有onClick的按钮,而不是在输入字段中触发onChange函数。同样的事情发生,但也许按钮点击触发重新加载。如果是这样,问题是我可以使用什么事件来触发脚本。它不能像@mplungjan建议的那样是onKeyUp,因为我可能需要输入两个数字来更新页码。 – Steve 2011-04-30 19:16:37