Как я могу изменить следующий код, чтобы не использовать eval? - PullRequest
2 голосов
/ 15 августа 2011
var settings = {};

$(".js-gen-settings").each(function(){
    var date;

    if (($(this).attr("type") === "checkbox") || ($(this).attr("type") === "radio")){//if its a checkbox
        eval("settings."+this.name+" = "+$(this).is(":checked"));
    }else{
        date = $(this).val();
        if (date == ""){
            eval("settings." + this.name + " = null");
        }else{
            eval("settings." + this.name + " = '" + date + "'");
        }
    }
});

a JSON.stringify версия settings будет отправлена ​​на сервер с помощью ajax.

Ответы [ 3 ]

6 голосов
/ 15 августа 2011

Если вы хотите изменить свойство объекта динамически, вы просто помещаете имя в [ скобках ].

settings[this.name] = null

settings[this.name] = date;

settings[this.name] = $(this).is(":checked");
2 голосов
/ 15 августа 2011

изменение:

eval("settings." + this.name + " = null")

до

settings[this.name] = null;

Я уверен, что вы можете выяснить остальное:)

1 голос
/ 15 августа 2011

Здесь, я повторно обработал ваш код:

$( '.js-gen-settings' ).each(function () { 

    if ( $( this ).is( ':checkbox, :radio' ) ) {
        settings[ this.name ] = this.checked;
    } else {
        settings[ this.name ] = this.value ? this.value : null;
    }

});
...