2

1ページに、検索用の2つのフォームがあります。

<form class="search-panel" method="post" action="" onsubmit="return searchRedirect(this)">
        <input type="test" name="searchFor" />
        <div class="additional-search-button"></div>
        <div id="additional-search-box">
            <div class="as-cont">
                Books<input type="radio" name="category" value="Books" checked="1" /><br/>
                School<input type="radio" name="category" value="School" /><br/>
                Music<input type="radio" name="category" value="Music" />
            </div>
        </div>
       <input type="submit" name="search" />
    </form>

<form class="search-panel" method="post" action="" onsubmit="return searchRedirect(this)">
            <input type="test" name="searchFor" />
            Games<input type="radio" name="category" value="Games" checked="1" />
            <input type="submit" name="search" />
        </form>

私の問題は、searchRedirectでGamesの検索をクリックすると、Books、School、またはMusicがチェックした場合に常にアラートを出すことです。

それが私のjavascript関数です:

function searchRedirect(form) {
    alert($(form['category']+':checked').val());

    if($(form['category']+':checked').val() == 'Форум')
        window.location.href = '/forum/search.php?keywords='+form['searchFor'].value;
    else {
        window.location.href = '/Search/'+$(form['category']+':checked').val()+'/'+form['searchFor'].value;
    }

    return false;
}

クリックしてゲームを検索する場合(クリックして本、学校、音楽のみを検索する場合)、クリックしてゲームのみを検索する場合に必要です。ただし、ゲームの検索フォームでは、常に最初のフォームのチェックボタンを使用するようになりました。

4

2 に答える 2

3

form['category']NodeListは、名前がであるすべてのフォーム要素のを提供しますcategory。したがって、。と連結してセレクターとして使用することはできません:checked。と同等になり$("[object NodeList]:checked")ます。

すでにjQueryを使用しているため、代わりに次を使用できます。

alert($(form).find("input[name='category']:checked").val());

つまり、のコンテキスト内で、という名前のformすべてのinput要素を検索し、categoryそのcheckedを取得しvalueます。

于 2012-08-26T18:00:17.003 に答える
1

実際に行うことはできませんform["category"] + ":checked"。代わりに、jQueryのfilterメソッドを使用し、「this」を使用してフォームを参照します。また、インラインハンドラーの代わりにjQuery .submit()を使用してイベントをキャッチし、コードを明確にするために(また、パフォーマンスを向上$(form['category']+':checked')させるために)変数にを入れて、jqueryが要素を再度検索する必要がないようにすることもできます。そしてまた。これはサンプルです:

$('form').submit(function(e){
var checked = $(this['category']).filter(':checked');
var value = checked.val();
alert(value);
})​

これはフィドルなので、フィドルできます(送信コールバックに渡されるeはイベントオブジェクトであり、e.preventDefaultはfalseを返すようなものなので、フォームは送信されません):http: //jsfiddle.net/SJ7Vd/

于 2012-08-26T18:39:33.337 に答える