使用 Javascript/jQuery 更改表单响应

Posted

技术标签:

【中文标题】使用 Javascript/jQuery 更改表单响应【英文标题】:Using Javascript/jQuery to change form response 【发布时间】:2018-02-01 18:38:42 【问题描述】:

我的网站上有一个表单,我只需要为输入几个邮政编码之一的人更改回复。我正在尝试设置代码以检查输入的邮政编码的前 3 位与保存在我的数组中的对象。它还没有完成,但我正在测试它,现在我正试图让 zipValue 一旦有人点击 zip 字段就显示在控制台中,但我没有任何运气得到它去工作。这就是我目前所拥有的 -

let inLA = false;
var zipsLA = ["700, 701, 703, 704, 705, 706, 707, 708, 710, 711, 712, 713, 714"];
const $zipField = document.getElementById('formFieldZip')
const $zipValue = document.getElementById('formFieldZip').value

$zipField.addEventListener('blur', function()
    console.log(zipValue);
);

我最终的希望是,如果输入的邮政编码的前 3 位数字与数组中的条目匹配,它将设置“inLA”为真。

编辑:小提琴链接:https://jsfiddle.net/zdy9sgbn/

【问题讨论】:

你有一个小提琴来说明这个例子吗? 请尝试改进您的问题。你知道你在做什么吗? let vs var?,数组定义不是真正的数组(只有一个元素)。在变量前导 $-sign...为什么? addEventListener at an undefined object ($zipField unequal zipField)... 检查您的代码,请自行删除此类错误。这些是解析错误(您的控制台应该会显示一些错误。修复它们) document.ready里面的addEventListener准备好了吗? @practice2perfect 添加了一个小提琴链接,我在document.ready内外都试过addEventListener,好像没什么区别 @practice2perfect 为什么 addEventListener 需要在 document.ready 中?你看到问题中使用了 jQuery 吗? 【参考方案1】:

试试这样的:

let inLA = false;
var zipsLA = ["700", "701", "703", "704", "705", "706", "707", "708", "710", "711", "712", "713", "714"];
const $zipField = document.getElementById('formFieldZip');

$zipField.addEventListener('blur', function()
    if (zipsLA.indexOf(this.value.slice(0, 3)) != -1) 
	    inLA = true;
     else 
    	inLA = false;
    
    console.log(inLA);
);
<form action="">
  <input type="text" id="formFieldZip">
</form>

【讨论】:

【参考方案2】:

问题是您试图在加载之前访问 DOM 元素。

小提琴显示您正在使用 onLoad,您应该使用准备就绪

也更新了你的小提琴https://jsfiddle.net/zdy9sgbn/1/

$( document ).ready(function() 
    const $zipField = document.getElementById('formFieldZip')
    const $zipValue = document.getElementById('formFieldZip').value

    $zipField.addEventListener('blur', function()
      console.log($zipField.value);
    );
);

一旦 DOM 准备就绪,您就可以查询 DOM 中的元素,并可以向其中添加事件监听器。

如果你正在为 jquery 的文档寻找一个纯 JS 替代方案,你可以使用这个解决方案here。

【讨论】:

【参考方案3】:

问题是您在开始时采用输入值(未定义)。它不会在您的事件列表器中更新。

从 eventListener 的输入中获取值。

使用这个,

var inLA = false;
var zipsLA = ["700", "701", "703", "704"];
const $zipField = document.getElementById('formFieldZip');

$zipField.addEventListener('blur', function()
    console.log($zipField.value);
    (zipsLA.indexOf($zipField.value) > -1) ? console.log('zip matched') : console.log('no match');
);

你也有很多语法错误。请参阅上面的 cmets。

【讨论】:

试试这个,谢谢。到目前为止,它说不匹配,即使它应该匹配,但它越来越接近了 你不需要把它放在window.onload中。您可以在正文的末尾添加一个脚本并将这段代码放在那里。如果您使用的是 jQuery,请在 document.ready 中添加代码。

以上是关于使用 Javascript/jQuery 更改表单响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript/jquery 检测 Asp.Net 表单是不是有效

如何使用 Javascript/jQuery 使用新对象制作其他表单?

如何使用 javascript/jquery 禁用表单中的所有内容?

防止 PHP/JavaScript/JQuery (PayPal) 中的表单操作

使用 JavaScript/jQuery 在重定向上发送 POST 数据? [复制]

使用Javascript / jQuery进行Bootstrap 4表单验证