これが最善の方法であるかどうかは気にしませんが、この場合、画面の幅に基づいて切り替える 2 つの同一の検索バーがあります。1 つはモバイル用、もう 1 つはデスクトップ用です。以下のコードはうまく機能しますが、繰り返しが多いので、もっと良い書き方があるはずです。
HTML:
<div class="search-wrp">
<input type="text" class="search" data-which="mobile" value="Search" />
<input type="button" value=" " class="go sprite" data-which="mobile" />
</div>
<div class="search-wrp">
<input type="text" class="search" data-which="desktop" value="Search" />
<input type="button" value=" " class="go sprite" data-which="desktop" />
</div>
JS:
$('.search').focus(function () {
var viewport = $(this).attr('data-which');
if ($('.search[data-which="' + viewport + '"]').val().toLowerCase() == "search") { $('.search[data-which="' + viewport + '"]').val(""); }
}).focusout(function () {
var viewport = $(this).attr('data-which');
if ($('.search[data-which="' + viewport + '"]').val() == "") { $('.search[data-which="' + viewport + '"]').val("Search"); }
}).keypress(function (event) {
var viewport = $(this).attr('data-which');
if (event.keyCode == '13') {
event.preventDefault();
$('.go[data-which="' + viewport + '"]').click();
}
});
$('.go').click(function () {
var viewport = $(this).attr('data-which');
if ($('.search[data-which="' + viewport + '"]').val() == null || $('.search[data-which="' + viewport + '"]').val() == "Search") {
alert("Please enter a search phrase.");
} else {
window.location = "http:" + "//" + window.location.host + "/Search.aspx?phrase=" + $('.search[data-which="' + viewport + '"]').val();
}
});
'.search[data-which="' + viewport + '"]' に変数を使用したいと思います。また、ビューポートを一度だけ定義して、関数内で使用できるようにしたいと考えています。 . ただし、私の試みはすべてスコープの問題に遭遇しました。