2010-09-24 3 views
9

Использование jQuery, как мне получить значение из текстового поля, а затем загрузить новую страницу на основе значения?jQuery anchor 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

+0

@BBonifield. Я с тобой согласен. У меня было в голове использовать «размытие», так как это гарантировало бы, что пользователь внес какой-то вклад, что, очевидно, является ошибочной идеологией. Следовательно, почему я добавил альтернативное предложение (похожее на ваше) с изменением использования 'preventDefault' вместо действия« return false », которое используется для предотвращения любого распространения. Кроме того, размытие будет работать, если пользователь щелкнет правой кнопкой мыши. – GenericTypeTea

+1

Это неэффективно, просто он будет работать, даже если пользователь щелкнет правой кнопкой мыши по ссылке, чтобы открыть ее на новой вкладке. –

3

Установить событие щелчка на теге привязки, чтобы добавить строку запроса при нажатии.

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

Используется метод serialize jQuery. Если селектор - это каждый вход или поле, вы хотите передать поле на следующую страницу. Удачи!

Не нужно использовать event.preventDefault.

+0

Если у вас есть только один вход, вы можете указать только один и получить его значение через $ ('# input'). Val(). Это должно быть быстрее, если только один вход. – Tim