rlb*_*usa 10 javascript forms post
我正在将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>
Run Code Online (Sandbox Code Playgroud)
这是我的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();
Run Code Online (Sandbox Code Playgroud)
当我手动单击表单时,我知道这些值已设置
value1: dynamicallygenerated
value2: HealthyFoodSection
value3: HealthyFoodFunBlog
Run Code Online (Sandbox Code Playgroud)
但是,当我的JavaScript提交表单时,这些值就会提交
value1: dynamicallygenerated
value2: BlogSection
value3: BlogName
Run Code Online (Sandbox Code Playgroud)
我100%确定没有其他JavaScript可以触发更改值-不能直接onchange调用submit()。
我不明白为什么我的javascript提交表单没有像手动单击那样更改值?如果发生PHP,我什至不知道该如何检测我的javascript提交了表单而不是单击提交,提交单击就是提交单击,对吗?
首先,这个问题仅涉及JS,不涉及PHP,
关于您的原始问题,JS提交和用户单击之间没有区别,真正的区别只是触发提交事件的事件(事件click或change,evt.targetDOM触发事件)。
建议使用addEventListener而不是直接使用onchange属性来绑定事件,它看起来像这样:
document.getElementsByName('sub_id')[0].addEventListener("onchange", function(evt) {
document.forms[0].submit();
});
Run Code Online (Sandbox Code Playgroud)
请尝试以下解决方案:
由此:
<input type='hidden' name='Value2' value='BlogSection'>
<input type='hidden' name='Value3' value='BlogName'>
Run Code Online (Sandbox Code Playgroud)
为此,根据您的问题,它们都应为小写:
<input type='hidden' name='value2' value='BlogSection'>
<input type='hidden' name='value3' value='BlogName'>
Run Code Online (Sandbox Code Playgroud)
由此:
// 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;
Run Code Online (Sandbox Code Playgroud)
为此,根据您的问题,他们应该指向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;
Run Code Online (Sandbox Code Playgroud)
从中更改HTML:
<select class='forminput' name='sub_id' onchange='this.form.submit()'>
Run Code Online (Sandbox Code Playgroud)
对此:
<select class='forminput' name='sub_id' onchange='document.forms[0].submit()'>
Run Code Online (Sandbox Code Playgroud)
只是为了确保没有其他修改输入值的操作,所以在触发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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |