2010-09-24 58 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