2013-05-18 1 views
1

Используя Cordova 2.5.0, я использую следующую функцию go, чтобы получить все <input> элементов на странице HTML.Задайте значение для разных типов элементов html с помощью той же функции jQuery

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 текстовых полей. Однако, если это возможно, я также хотел бы установить значение для checkboxes et cetera, и я ожидал, что .val(value) будет делать трюк, в конце концов, я могу получить значение элемента также с помощью .val(), даже из других элементов , как флажок. Я бы предпочел не проверять каждый элемент, в который я хочу добавить контент, и в соответствии с типом элемента использовать правильный метод jQuery для установки значения элемента.

Любой способ или способ достижения этого?

(Для уточнения чуть больше :) addContentToElement("checkbox3", "on"); не работает, хотя я получить on из .val() от элемента, но addContentToElement("textfield1", "some text") делает. И я знаю, что могу сделать это с .prop('checked', true), или .attr('checked', true), но так как я могу получить значение с .val(), почему бы не установить его?

ответ

2

Вы не можете использовать «val()» для флажков и радиобоксов для проверки, потому что они отличаются от текстовых полей. они работают, когда вы меняете атрибут «checked», чтобы отправлять данные формы на сервер, на веб-сайт и т. д. Вы можете использовать val() только тогда, когда вы хотите изменить значение (атрибут value).

Так что, если я правильно понимаю, вы хотите изменить флажки, когда функция «addContentToElement» получает значение «on». Я изменил код, и вы можете использовать код ниже.

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

Но вы должны отправить тип в функцию, чтобы найти введенный флажок.

+0

Итак, короткий ответ: «Нет, вы не можете, вы должны обрабатывать все типы элементов (с помощью оператора switch или что-то еще)»? – stealthjong

+0

Да, точно :) –

Смежные вопросы