javascript - PHP区分javascript和用户点击?

为了避免弹出窗口,我将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我点击提交,提交点击是提交点击,对吧?

时间:

首先,这个问题只关于 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);


});



...