Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery onchange事件在onmousedown事件之后激发_Jquery_Html - Fatal编程技术网

Jquery onchange事件在onmousedown事件之后激发

Jquery onchange事件在onmousedown事件之后激发,jquery,html,Jquery,Html,我使用jQuery和Ajax动态生成表单元素。 因此,我的代码相应地生成了元素,所有元素都工作正常 现在,我在每个文本框上都有一个onchange事件,该事件会在值更改的情况下触发焦点 另外,我还有一个保存按钮,它有一个onmousedown事件来发布表单数据 我使用的代码: (HTML代码) $(文档).ready(函数(){ $('#form')。在('change','.vchange输入[type=text]'上,函数(){ //ajax回发代码,将文本框数据保存到数据库中。 });

我使用jQuery和Ajax动态生成表单元素。 因此,我的代码相应地生成了元素,所有元素都工作正常

现在,我在每个文本框上都有一个
onchange
事件,该事件会在值更改的情况下触发焦点

另外,我还有一个保存按钮,它有一个
onmousedown
事件来发布表单数据

我使用的代码:

(HTML代码)


$(文档).ready(函数(){
$('#form')。在('change','.vchange输入[type=text]'上,函数(){
//ajax回发代码,将文本框数据保存到数据库中。
});
$('#form').on('mousedown','.vsubmit',函数(){
$(“#表单”).change();//根据建议更新了代码
let choice=确认(“您确定要提交表单吗?”);
如果(选择)?提醒('谢谢'):提醒('取消');
});
});

现在,,问题是
mousedown
事件是在
onchange
事件之前调用的,因此数据没有保存在表中。

到目前为止,我了解到您的问题是在提交表单之前使用
ajax
调用保存
textinput
中的值,并且
mousedown
事件在
onchange
那么为什么不手动触发
mousedown
事件中的
onchange
,以解决如下问题

$(“#表单”).onchange()
$(“#形式”).fireEvent(“onchange”)

编辑

我只是想添加示例代码,这样如果OP在理解我刚刚发表的评论中所讨论的想法时遇到问题,那么问题仍然没有解决,我想说的是,您可以使用on change跟踪文本输入的更改,并解决
mousedown
事件总是在
onchange
之后触发的问题,即手动触发
mousedown
中的
onchange
,如
$('input[class=“vchange”])。trigger('change')并且您的代码中有错误的选择器用于
onchange
事件
'。vchange-input[type=text]
这不会使用
.vchange
'input[class=“vchange”].
选择任何元素。请参阅下面的演示,其中表单将始终在发送ajax调用后提交

但请记住,这将同时触发对类
的每个输入的ajax调用。vchange
中有一些值意味着它不是空的。因此,更好的方法是创建一个单独的函数,用class
.vchange
收集具有
值!=''的所有字段
并发送一个调用以保存所有字段(如果有多个字段)

$(文档).ready(函数(){
$(文档).on('change','input[class=“vchange”]',function(){
如果($(this.val()!=''){
log('将文本框数据保存到数据库中的ajax回发代码');
}
});
$(document).on('mousedown','.vsubmit',function(){
$('input[class=“vchange”]”)。触发器('change');
console.log(“提交表单”);
});
});

为什么不在您要求用户确认的同一个处理程序中处理输入? 如果使用表单元素,则可以使用submit事件并考虑使用submit按钮来支持仅键盘输入

$(函数(){
$('#form')。关于('submit',函数(e){
e、 预防默认值();
let choice=确认(“您确定要提交表单吗?”);
如果(!选择){
控制台信息(“取消”);
}否则{
info(“将文本框数据保存在数据库中的ajax回发代码”);
}
});
$('.vsubmit')。在('click',函数(){
$(“#表格”).submit();
});
});

您必须为事件函数传递一个变量。我在这里称之为“事件”。变量“event”表示触发事件的元素。在本例中,偶数为“onmousemove”。因此,您可以通过使用“event.target.value”来访问其内容,例如值。无论是否单击鼠标按钮,只要将鼠标移到此元素上方,就会发生此事件。但由于其值不变,当您不按鼠标按钮或移动滑块时,将看不到任何更改。但它会触发。当您让它显示滑块的值或执行其他操作时,您会首先看到更改,这些更改会随着该函数的每次触发而更改

这是您正在搜索的解决方案:

$('#myrange').on('mousemove', function(event){
    $('#labelToShow').html(event.target.value);
    $('#inputWithTypeNumber').val(event.target.value);
})
这是一个代码示例,让您了解它是如何工作的

var somecounter = 0;
$('#myrange').on('mousemove', function(event){
    $('#labelToShow').html(somecounter++);
});
只需创建一个类型为“range”的输入元素,并将id设置为“myrange”。然后还创建一个id为“labelToShow”的标签和另一个id为“inputWithTypeNumber”的“number”类型的输入元素。像这样

<input type="range" id="myrange" />
<input type="number" id="inputWithTypeNumber" />
<label id="labelToShow">Move your mouse above the slider</label>

将鼠标移到滑块上方

那么基本上你是想在提交表单之前保存文本框中的值吗?是的,一种,由于表单非常大,有许多相互依赖的元素,用户可以自由地向表单中添加n个字段。刚刚更新了答案,但是我如何才能控制哪个文本框的值发生了更改,因为有许多文本框,它们是根据用户需要动态添加的。此外,这两个事件都是先按鼠标向下键触发,然后按鼠标向下键触发的稍后再更改事件。没有跳过任何事件。嗯,这可能是需要注意的问题。我尝试了此解决方案,但在单击或鼠标向下事件后仍会触发一次更改事件。@Lalitkumar.annaldas能否使用您尝试的最新代码更新您的帖子,如果我已经更新了代码,那么解决问题就更容易了……请检查一下。我无法共享ajax端代码,因为它调用了用于在另一个元素中设置值的json响应服务器。没有实际的表单我认为
id
表单
位于
div上<
<input type="range" id="myrange" />
<input type="number" id="inputWithTypeNumber" />
<label id="labelToShow">Move your mouse above the slider</label>