javascript - PHP區分javascript和用戶點擊?

66 2

為了避免彈出窗口,我將javascript注入到一個php網站中,以便可以自動提交表單。 另外,jquery有一個問題,所以我使用普通的javascript 。

這是頁面上的窗體:


<form action='http://mywebsite.com/index.php?&act=MYFUNCTION&CODE=01&CookieDate=1' name='subscribe_check' method='POST'>


<input type='hidden' name='value1' value='dynamicallygenerated'>


<input type='hidden' name='Value2' value='BlogSection'>


<input type='hidden' name='Value3' value='BlogName'>


<select class='forminput' name='sub_id' onchange='this.form.submit()'>


<option value='------------' selected='selected'>To read this article, you must choose a subscription level</option>


<option value='1'>Subscribe to daily updates</option>


<option value='2'>Subscribe to promotional emails</option>


<option value='3'>No thanks, I'm not interested in being healthy</option>


</select>


</form>



這是我的javascript:


//unselect any selected item on the SELECT


 if( document.getElementsByName('subscribe_check').selectedIndex )


 document.getElementsByName('subscribe_check')[document.getElementsByName('subscribe_check').selectedIndex].selected = false;



//select select the last option


 document.getElementsByName('subscribe_check')[1][3].selected = true;


//submit the form


 document.forms[0].submit();



手動單擊窗體時,我知道這些值已設置


 value1: dynamicallygenerated


 value2: HealthyFoodSection


 value3: HealthyFoodFunBlog



但是當我的javascript提交表單時,這些值被提交


 value1: dynamicallygenerated


 value2: BlogSection


 value3: BlogName



我 100%確定沒有它的他的javascript可以更改值- 不可能,onchange 直接調用 submit()

我不明白為什麼我的javascript提交表單不改變值,如手動點擊它? 如果有PHP發生,我不明白它怎麼會檢測到我的javascript提交表單verus我點擊提交,提交點擊是提交點擊,對吧?

时间: 原作者:

127 5

首先,這個問題只關於 JS,不涉及 PHP,

對於你的原始問題,JS提交和用戶單擊沒有區別,真正的差別隻是觸發提交操作( 事件 clickchange,其中 evt.target 是觸發事件的dom ) 。

作為recomendation使用 addEventListener 綁定事件,而不是直接使用 onchange 屬性,它將如下所示:


document.getElementsByName('sub_id')[0].addEventListener("onchange", function(evt) {


 document.forms[0].submit();


});



請嘗試以下解決方案:

1.修復輸入名稱:

從這個角度:


<input type='hidden' name='Value2' value='BlogSection'>


<input type='hidden' name='Value3' value='BlogName'>



為此,accourding針對你的問題應該是小寫的:


<input type='hidden' name='Value2' value='BlogSection'>


<input type='hidden' name='Value3' value='BlogName'>



2.修復你的JS onclick 實現:

從這個角度:


//unselect any selected item on the SELECT


 if( document.getElementsByName('subscribe_check').selectedIndex )


 document.getElementsByName('subscribe_check')[document.getElementsByName('subscribe_check').selectedIndex].selected = false;


//select select the last option


 document.getElementsByName('subscribe_check')[1][3].selected = true;



為此,根據你的問題,他們應該指向 sub_id,也要看最後一行索引( idx [1][3] 不存在,應該是 [0][3] ):


//unselect any selected item on the SELECT


 if( document.getElementsByName('sub_id').selectedIndex )


 document.getElementsByName('sub_id')[document.getElementsByName('sub_id').selectedIndex].selected = false;


//select select the last option


 document.getElementsByName('sub_id')[0][3].selected = true;



3 。執行相同的提交函數

更改你的HTML:


<select class='forminput' name='sub_id' onchange='this.form.submit()'>



對此:


<select class='forminput' name='sub_id' onchange='document.forms[0].submit()'>



還有。

只要確保沒有它的他的修改你的輸入值在 onchange 觸發之後列印它們,就像這樣。"。 並且延遲提交並再次列印它們,這應該會給出一個很好的看法:


document.getElementsByName('sub_id')[0].addEventListener("onchange", function(evt) {


 console.log(document.getElementsByName('value2'), document.getElementsByName('value3'));


 setTimeout(function() {


 console.log(document.getElementsByName('value2'), document.getElementsByName('value3'))


 document.forms[0].submit();


 },100);


});



...