使用相同的jQuery函数设置不同html元素类型的值

Set value on different html element types with same jQuery function

本文关键字:html 元素 类型 函数 jQuery 设置      更新时间:2023-09-26

使用Cordova 2.5.0,我使用以下函数来获取HTML页面内的所有<input>元素。

function getInput() {
   var formElements = new Object();
   $("form :input").each(function(){
       formElements[this.name] = $(this).val(); //that's this line
   });
   return formElements;
}

实际上,我没有"获取"元素,而是获取值,正如您在代码片段的第四行中看到的那样。

现在,我试图稍后在应用程序中设置这些值。

function insertResults(data) { //data is a json string
    console.log("in insertResults (JS): " + data);
    var jso = JSON.parse(data);
    for (var key in jso) {
        addContentToElement(key, jso[key]);    
    }
}
function addContentToElement(elementname, valuetoset) {
    $(function() {
        $("input[name='" +elementname +"']").val(valuetoset);
    });
}

console.log()打印这个:in insertResults (JS): {"checkbox3":"","textfieldmulti1":"some text","textfield1":"some more text","boxed1":"even more text","checkbox1":"on","checkbox2":"on"}

上面的代码可以很好地用于html文本字段。然而,如果可能的话,我想设置复选框等的值,我有点希望.val(value)能做到这一点,毕竟,我可以检索元素的值,以及.val(),甚至从其他元素,如复选框。我不希望检查要添加内容的每个元素,而是根据元素类型使用正确的jQuery方法来设置元素的值。

有什么方法可以做到这一点吗?

(为了澄清一点:)addContentToElement("checkbox3", "on");不起作用,虽然我从元素中检索.val()中的on,但addContentToElement("textfield1", "some text")确实不起作用。我知道我可以用.prop('checked', true).attr('checked', true)做到这一点,但既然我可以用.val()获得值,为什么不设置它呢?

不能对复选框和单选框使用"val()"进行检查,因为它们与文本框不同。当你改变"checked"属性来发送表单数据到服务器、网站等时,它们就会起作用。只有当你想改变值(值属性)时才能使用val()。

所以,如果我理解正确,你想改变复选框时,"addContentToElement"函数得到"on"值。我修改了你的代码,你可以使用下面的代码。

function addContentToElement(elementname, valuetoset) {
 $(function() {
     if (valuetoset === "on") {
       $("input[name='" +elementname +"']").attr('checked', true);
     } else {
       $("input[name='" +elementname +"']").val(valuetoset);
     }
 });
}

但是你应该把type发送给函数来查找复选框的输入