0

私はjavascriptがまったく初めてで、これを機能させる方法がわかりません...コードを少し変更しましたが、6行目は意味がないことに注意してください。それがこの投稿の主な理由です。

<script>
function checkReloading() {
    if (window.location.href.split=="?showpastdate") {
        document.getElementById("showpastdate").checked=true;
    } else {
        document.getElementById("showpastdate").checked=false;
    }
}

function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.replace("?showpastdate");
    } else {
        window.location.replace("");
    }
}
window.onload=checkReloading;
</script>

わかりました、これはかなり読みやすいと思います。

まず、完全なパスを指定する必要があるため、window.location.href.split が機能しません。しかし、これを動的にして、より多くの Web サイトで使用できるようにするにはどうすればよいでしょうか? どこにでもwindow.location.protocol + "//" + window.location.host + "/" + window.location.pathname;ありますが、動的 Web ページにこのコード行を実装するにはどうすればよいでしょうか? 誰かが私に例を挙げてもらえますか?

このコードで達成したいことは次の
とおりです。これは機能します(静的な完全なURLを使用する場合)。しかし、それより...?showpastdate?showpastdate$_GET?showpastdate

?showpastdateURLが元の.php状態または他のGET変数に戻るよりも、チェックボックスが再度クリックされるまでチェックされたままになるように、このコードを変更するにはどうすればよいですか?

コードの書き方について質問して申し訳ありませんが、私が 8 時間ネットサーフィンをしている間に、この単純な行を 2 分で書ける人もいるでしょう。JavaScriptを学ぶつもりはありませんが、これは私のプログラムが過去の日付を表示するアイテムをオン/オフに切り替えるための素晴らしいオプションであり、2つのチェックボックス、1つはオン用、もう1つはオフ用よりも優れています:x編集: +送信ボタン@( O _o)@

事前にサンクス。

4

4 に答える 4

1

.split()提供されたパラメーターに応じて、文字列オブジェクトで実行して、それを細かく分割できる関数です。次
"abcdefg|hijklmnop|qrstuvw".split('|')
のような配列になります。
["abcdefg","hijklmnop","qrstuvw"]

ここで、チェックボックスの「チェック済み」ステータスを変更するために、URL に「?showpastdate」パラメータを追加したと思います。これを行う最も簡単な方法は次のとおりです。

document.getElementById("showpastdate").checked = (~window.location.href.indexOf("?showpastdate"))

この部分: window.location.href.indexOf("?showpastdate")href を検索し
"?showpastdate"
て文字列が見つかった場合は、インデックスを返します。そうでない場合は -1 を返します。その前の波線は、-1 または 0 (またはそれ以上) を true / false に変換することです。

私はそれが何をするtoggleAutoRefresh()ことになっているのかよくわかりませんが、

編集 1

ああ、toggleAutoRefresh()これを追加するだけです:

if (cb.checked) {
    window.location.href.replace("?showpastdate","");
}

if-elseそのブロックの代わりにそこにあります。この.replace()関数は、文字列に対して同じように.split()機能します。これには 2 つの引数が必要です。何を探すか、何を置き換えるかです。たとえば、次のようになります。

var someString = "words and stuff"
var result = someString.replace(" ","_");
//result will be "words_and_stuff"

編集 2

これらの関数は動作するはずです:

function checkReloading() {
    document.getElementById("showpastdate").checked = (~window.location.href.indexOf("?showpastdate"))
}

function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.href.replace("?showpastdate","");
    }else{
        window.location.href += "?showpastdate";
    }
}

どこから toggleAutoRefresh() を呼び出していますか?

編集 3

あなたの最後のコメントから私が結論付けることができるのは、あなたは次のようなことをしたいということです:

// If a checkbox named "cb" is checked, and the url contains "?showpastedate"
if ((cb.checked) && ~window.location.href.indexOf("?showpastdate")) { 
    //Uncheck the checkbox and remove the "?showpastedate" from the url
    document.getElementById("showpastdate").checked = false;
    window.location.href.replace("?showpastdate","");
} else {
    // Else, check the checkbox and add the "?showpastedate" to the url
    document.getElementById("showpastdate").checked = true;
    window.location.href += "?showpastdate";
}

の前の「~」の使用に注意してくださいindexOf。が文字列の先頭にある
場合string.indexOf("text")は、 のように0 を返します。最初のインデックスは 0 から数えます。"text""tekstbooks bla bla bla"

このゼロはfalse、暗黙的にブール値にキャストすると、 として解釈されます。したがって、indexOf最初のインデックスで結果が見つかった場合、(この状況では)true文字列が見つかったことを示すために返されます。そのため、Bitwise NOT ~を の結果に適用しますindexOf-1indexOfの「見つかりません」の値は false を返し、他のすべての結果は true を返します。

于 2012-11-19T14:13:43.433 に答える
0

わかった。わかった。

<script>
function toggleAutoRefresh(cb) {
    if (~window.location.href.indexOf("?hidepastdate") == 0){
        window.location.replace("?hidepastdate");
        document.getElementById("showpastdate").checked == true;
    }
    if (~window.location.href.indexOf("?showpastdate") == 0){
        window.location.replace("?showpastdate");
        document.getElementById("showpastdate").checked == true;
    }
}
</script>

これで、クリックするたびにURLが切り替えられ、PHPがCSS表示を実行します。

努力と正しい方向に私を向けてくれてありがとう、Cerbrus!時間を大幅に節約できました。

于 2012-11-20T09:24:44.763 に答える
0

もう少し説明します。

私は JQuery データテーブルを持っていますが、CSS を介して異なる<tr classes>. データベースに保存されている情報に応じて、これら<tr>は異なるクラスを取得するため、データテーブルの色が異なります。

ここで<tr class>、ユーザーに非表示/表示のオプションを提供したいと思います。チェックボックスを使用してこれを行うことを考えていました.javascriptは、チェックするとURLを解析し、再度チェックを外すと削除します。この URL は、php でさまざまなクエリを実行するために使用できます。if :$_GET['parsedurl']すべてのテーブルを表示するクエリ、elseif $_GET['empty']: その 1 つの情報を表示しないクエリ。

しかし、これは最悪の方法です。display: noneこれはクライアント側で機能しているため、テーブル クラスのオンとオフを切り替える何かを見つける必要があります。

だから私は今、JavaScriptの解析をURLに保持することを考えており、URLに応じて、.php GETを実行してエコーアウトする<tr style: display: none>か、単に<tr>

したがって、これを行うJavaScriptが必要です:

  • チェックボックスがオンの場合、projectlist.php?showpastdate にリダイレクトします
  • URL = projectlist.php?showpastdate の場合、チェックボックスをオンにします。
  • URL = projectlist.php?showpastdate で、チェックボックスがオフになっている場合は、チェックボックスがオフになっている projectlist.php にリダイレクトします。

これらのトリガーが最良の選択肢だと思いますか?

.PHP を使用すると、次のようになります。

if (isset($_GET['showpastdate']))
{
<tr style: display: none>
}
else
{
<tr>
}

多分誰かがさらに良い解決策を持っていますか? 聞きたいです!

ありがとう。

編集

私が今持っているJavaScriptは次のとおりです。

<script>
function toggleAutoRefresh(cb) {
    if (cb.checked) {
        window.location.replace("?showpastdate");
    }
        // If a checkbox named "cb" is checked, and the url contains "?showpastedate"
    if ((cb.checked) && !~window.location.href.indexOf("?showpastdate")) { 
        //Uncheck the checkbox and remove the "?showpastedate" from the url
        document.getElementById("showpastdate").checked = false;
        window.location.href.replace("?showpastdate","");
    } else {
        // Else, check the checkbox and add the "?showpastedate" to the url
        document.getElementById("showpastdate").checked = true;
        window.location.href += "?showpastdate";
    }   
}
</script>

チェックボックスをオンにすると、ページ projectlist.php?showpastdate に移動し、そこでオフになります。再度確認するとprojectlist.php?showpastdate?showpastdateに行きます。別のものを追加するのではなく、?showpastdate を削除する必要があります。

これは PHP でも可能ですが、このチェックボックスの送信ボタンが本当に好きではありません。確認して実行するだけです。

于 2012-11-20T08:33:59.393 に答える
0

URL 変更イベント - JavaScript

http://help.dottoro.com/ljgggdjt.php

onchange() JavaScript イベントも使用できると思います。

于 2012-11-19T14:12:36.600 に答える