2010-09-24 61 views
9

使用jQuery,我如何从文本框中获取值,然后根据值加载新页面?jQuery锚preventDefault

例如,可以说,该文本框包含page1.php中“你好”,我该如何改变一个锚标记的默认行为,到现在加载以下

使page2.php?TXT =你好

我见到目前为止如下:

<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("a.mylink").click(function(event){ 
     alert("link clicked"); 
     event.preventDefault(); 
    }); 
}); 
</script> 

回答

18

的Html

<input type="text" id="demoQuery" /> 
    <a id='demoLink' href='javascript:'>Iam a link</a> 

的Javascript

jQuery('#demoLink').bind('click',function(e){ 
     e.preventDefault(); 
     document.location.href="someUrl.php?text="+ jQuery('#demoQuery').val();  
}); 
4

您可以使用blur事件的文本框中,所以用户已经打完后锚可以使用下面的jQuery的更新:

$("#textBoxId").blur(function() { 
    var text = $(this).val(); 
    var end = text.length == 0 ? "" : "?txt=" + text; 
    $("a.mylink").attr("href", "Page2.php" + end); 
}); 

只需更改锚点的href。那么你不需要自己处理锚点click。锚点将重定向到“Page.php?txt = Hello”。这将确保链接始终处于最新状态,并且在用户右键单击并选择在新窗口中打开时可以正常工作。

或者你可以做的周围用另一种方式和处理锚的点击:

$("a.mylink").click(function(e) { 
    var text = $("#textBoxId").val(); 
    document.location.href = $(this).attr("href") + "?txt=" + text; 
    e.preventDefault(); 
}); 

但是,如果用户点击的权利,这一事件将不会触发。

+0

我实在不明白使用的好处'blur'在处理'click'直接。事实上,它似乎是处理这种情况的更低效的方式。点击每页发生一次,而模糊事件可能发生多次。 – BBonifield 2010-09-24 12:22:46

+0

@BBonifield。我赞同你。我在头脑中使用“模糊”,因为它可以保证用户输入了一些信息,这显然是一个有缺陷的意识形态。因此,为什么我添加了替代建议(类似于你的),使用'preventDefault'而不是''return false''操作来允许任何传播。另外,如果用户右键单击,模糊将会起作用。 – GenericTypeTea 2010-09-24 12:33:56

+1

效率并不低,只是即使用户用鼠标右键单击要在新选项卡中打开的链接,它也能正常工作。 – 2010-09-24 12:34:40

3

在锚点标记上设置单击事件以在单击时添加查询字符串。

$('a').click(function() { 
    var querystring = $('input').serialize(); 
    this.href += querystring; 
}); 

这使用jQuery的serialize方法。选择器是哪个输入或字段,您希望将字段传递给下一页。祝你好运!

无需使用event.preventDefault。

+0

如果你只有一个输入,你可以只使用这个输入并通过$('#input')。val()获取它的值。如果只有一个输入,那应该会更快。 – Tim 2010-09-24 12:43:01