2012-11-19 19 views
0

我完全新的JavaScript和我不知道如何得到這個工作...我修改了一些代碼,但請注意,第6行沒有任何意義。這是這篇文章的主要原因。JavaScript的複選框被檢查,href到?page2,如果在?page2:保持cb檢查,當選中,href時?頁1

<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不起作用,因爲我必須給完整的路徑。但是我怎樣才能使這種動態,所以它可以在更多的網站上使用?我到處看到:window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;但我該如何實現動態網頁的這一行代碼?有人能給我一個例子嗎?

我想實現這個代碼是:
當showpastdate檢查,HREF到?showpastdate,當?showpastdate檢查保持這樣我就可以?showpastdate使用PHP $_GET。這工作(當我使用靜態完整的網址)。但是,除了...

我怎麼有這樣的複選框保持在?showpastdate檢查,直到再次點擊,比URL回到原來的狀態.PHP或其他GET變種修改此代碼?

對不起,要求寫代碼,但我敢打賭,你可以在2分鐘內寫出這條簡單的線條,而我正在衝浪8個小時。不是要學習JavaScript,但這真的會是我的程序切換顯示過去日期ON/OFF的項目的好選擇,比有2個複選框更好,ON 1和OFF:x編輯:+提交按鈕@( O _o)@

Thanx提前。

回答

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!爲我節省了很多時間。

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(或更高)轉換爲真/假。

我不太知道什麼是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")在字符串的開頭找到"text",像它會在"tekstbooks bla bla bla",則返回0。首先指數爲0。

這個零被解釋爲false開始計數,當隱含強制轉換爲布爾。因此,如果indexOf要在第一個索引處找到結果,它應該(在這種情況下)返回true以指示已找到字符串。這就是爲什麼我們將Bitwise NOT~應用於indexOf的結果。 -1indexOf的「未找到」值返回false,並且所有其他結果返回true。

+0

我真的不知道如何解決這個問題:$ –

+1

+1

因此,您想在檢查複選框時再次將URL添加到網址中? 編輯的代碼有點... – Cerbrus

0

我會解釋一點點。

我有一個JQuery數據表,並通過CSS我有不同<tr classes>。根據存儲在數據庫中的信息,這些<tr>將獲得不同的類,因此數據表中的顏色不同。

現在爲一個<tr class>我想讓用戶選擇隱藏/顯示。我正在考慮用複選框執行此操作,並且在檢查時javascript會分析URL,並在未選中時刪除它。如果$_GET['parsedurl']:查詢顯示所有表,elseif $_GET['empty']:查詢不顯示1信息,該URL可用於運行不同的查詢。

但是,這是最糟糕的做法。我需要找到一些東西來打開或關閉表類的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做,但我真的不喜歡這個複選框的提交按鈕。只需檢查並執行。

+1

你忘了',「''在你的第一個' if「,在最後一個代碼塊中 應該是: 'window.location.href.replace(」?showpastdate「,」「);' – Cerbrus

+1

實際上,如果頁面加載時勾選了複選框(」?showpastdate「在網址中),它不應該做任何事情,對吧?(除了保持複選框選中) 在這種情況下,刪除整個if塊。 – Cerbrus

+0

如果我把「」放在旁邊(如果是第一塊),不會改變任何東西。如果我刪除(第一)if塊,甚至無法檢查複選框,請猜測它刷新 –