<!DOCTYPE html> <html lang="ja"> <head> <{$content_type|smarty:nodefaults}> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="../js/textchange/jquery.textchange.min.js"></script> </head> <body> <span class="wrap"> <input id="ajaxSave" type="text" name="qKey" value="<{$query}>" size="25"> </span> <span id="ajaxFired" class="wrap"></span> <ul> <li class="sortLink"><a href="./?fbid=<{$fb_id}>&order=id&dasort=desc&q=<{$query}>">ID▼</a></li> <li class="sortLink"><a href="./?fbid=<{$fb_id}>&order=id&dasort=asc&q=<{$query}>">ID▲</a></li> <li class="sortLink"><a href="./?fbid=<{$fb_id}>&order=mod&dasort=desc&q=<{$query}>">DATE▼</a></li> <li class="sortLink"><a href="./?fbid=<{$fb_id}>&order=mod&dasort=asc&q=<{$query}>">DATE▲</a></li> </ul> </body> <script> var timeout; $('#ajaxSave').bind('textchange', function () { clearTimeout(timeout); $('#ajaxFired').html('Typing...'); var self = this; timeout = setTimeout(function () { var sortLink = $('.sortLink a'); var query = encodeURIComponent($("#ajaxSave").val()); $('#ajaxFired').html('Saved: ' + $(self).val()); sortLink.attr('href', sortLink.attr('href').replace(/&q=[^&]*/, '&q=' + query)); }, 1000); }); </script> </html>
▽1
●
a-kuma3 ●100ポイント ベストアンサー |
こんな感じです。
var timeout; $('#ajaxSave').bind('textchange', function () { clearTimeout(timeout); $('#ajaxFired').html('Typing...'); var self = this; timeout = setTimeout(function () { // var sortLink = $('.sortLink a'); var query = encodeURIComponent($("#ajaxSave").val()); $('#ajaxFired').html('Saved: ' + $(self).val()); // sortLink.attr('href', sortLink.attr('href').replace(/&q=[^&]*/, '&q=' + query)); // ★こういうふうに変えました $('.sortLink a').each(function() { $(this).attr('href', $(this).attr('href').replace(/&q=[^&]*/, '&q=' + query)); }); }, 1000); });
元のコードだと sortLink.attr('href', ...) は、第二引数の値を四つの A 要素にセットしますが、指定している値はひとつだけです。
.attr()
Get the value of an attribute for the first element in the set of matched elements or set one or more attributes for every matched element.
http://api.jquery.com/attr/
あ、マニュアルを見てて気がついた。こういうふうにも書けます。
<script> var timeout; $('#ajaxSave').bind('textchange', function () { clearTimeout(timeout); $('#ajaxFired').html('Typing...'); var self = this; timeout = setTimeout(function () { var sortLink = $('.sortLink a'); var query = encodeURIComponent($("#ajaxSave").val()); $('#ajaxFired').html('Saved: ' + $(self).val()); // sortLink.attr('href', sortLink.attr('href').replace(/&q=[^&]*/, '&q=' + query)); // ★こんなふうにも書けました sortLink.attr('href', function(i, val) { return val.replace(/&q=[^&]*/, '&q=' + query); }); }, 1000); });