我正在尝试在包含多个表单的页面上提交表单。表单需要从选择/下拉框中提交值。此选择框是动态填充的。一切正常但似乎脚本没有提交第一个选项。我需要更改选择框然后才能工作。当我不更改选择框时,不会提交任何内容。
我尝试选择第一个选项,但这也不起作用。
任何人都知道我做错了什么?
POPULATE SELECT BOXES
<script type="text/javascript">
$(document).ready(function(){
$.getJSON('product.html?format=json', function(data){
$.each(data.product.variants, function (index, variant) {
$('#product_123').append(new Option('' + variant.title + ' (€'+ variant.price.price +')', '' + variant.id + ''));
});
});
});
</script>
HTML
<select id="product_123"></select>
<a href="#" class="actionbutton prodorderbtn submit">Order</a>
</form>
提交
<script>
$("#product_123").change(function(){
var pvid = $('option:selected', $(this)).val();
$(".submit").on("click", function(e){
e.preventDefault();
$("#formProduct123").attr("action", "/cart/add/" + pvid).submit();
return false;
});
});
</script>
答案 0 :(得分:1)
问题在于提交位:
<script>
$("#product_123").change(function(){
var pvid = $('option:selected', $(this)).val();
// on click handler is set every time the option changes
$(".submit").on("click", function(e){
e.preventDefault();
$("#formProduct123").attr("action", "/cart/add/" + pvid).submit();
return false;
});
});
</script>
注意点击处理程序是如何嵌套在change
中的。这意味着在进行更改之前,不会注册任何点击处理程序。
我提出以下解决方案:只需检查用户提交时的值,而不是更新处理程序。
var product = $('#product_123');
var form = $('#formProduct123');
// Set the handler once at the start, and check the value at the time of submit.
$('.submit').on('click', function(){
e.preventDefault();
var pvid = $('option:selected', product).val();
form.attr('action', '/cart/add/' + pvid).submit();
return false;
});
我们仍然会在开始时设置一次onclick
处理程序。在点击期间,我们会查找父表单和兄弟选项。请验证此DOM遍历是否适合您。
$('.submit').on('click', function(){
e.preventDefault();
var submit = $(this);
var form = submit.parents('form').first();
var selected = form.find('option:selected');
var pvid = selected.val();
form.attr('action', '/cart/add/' + pvid).submit();
return false;
});
我强烈建议你放弃onchange
。请考虑以下事项:
A
选择一些选项。B
,然后按此提交产品。
A
是最后一次更改,因此产品A
会被提交。答案 1 :(得分:0)
您可以使用use event delegation设置以下内容,以便在将选择内容添加到DOM时不必运行代码:
$(function() {
$(document).on('change',"#product_123", function(){
var pvid = this.value;
var form = this.form;
$(form).attr('action', '/cart/add/' + pvid);
form.submit();
});
});
在附加选择之后,运行以下代码:
$('#product_123').change();
应该这样做。实际上,您的组合代码变为:
$(function() {
$(document).on('change','#product_123', function(){
var pvid = this.value;
var form = this.form;
$(form).attr('action', '/cart/add/' + pvid);
form.submit();
});
$.getJSON('product.html?format=json', function(data){
$.each(data.product.variants, function (index, variant) {
$('#product_123').append(new Option('' + variant.title + ' (€'+ variant.price.price +')', '' + variant.id + ''));
});
$('#product_123').change();
});
});