当某些===“undefined”时连接控制属性

时间:2014-10-14 12:17:47

标签: jquery

我需要创建一个由<input type="text" ...表单控件的属性值组成的查询字符串。有些属性可能不存在,因此我正在测试"undefined"但未获得预期结果。

var ctl = $('#somecontrol');

var url = "/someuri/" +
    "?pid=" + ctl.attr('id') +
    "&m=" + (typeof ctl.attr('mid') === "undefined") ? "" : ctl.attr('mid') +
    "&u=" + (typeof ctl.attr('uid') === "undefined") ? "" : ctl.attr('uid') +
    "&dvalue=" + (typeof ctl.attr('value') === "undefined") ? "" : ctl.attr('value') +
    "&dchoice=" + (typeof ctl.val() === "undefined") ? "" : ctl.val();

某些属性有时可能未定义,而在其他属性中定义。如果我删除三元逻辑并且只包含ctl.attr('...') + url变量就可以了,除了它将包含undefined未定义的属性。

包含三元逻辑总是将url保留为空字符串("")。

var url =行我做错了什么?

1 个答案:

答案 0 :(得分:1)

重要的是:

  • (typeof ctl.attr('mid') === "undefined") ? "" : ctl.attr('measureid')和其他类似的代码块应该包含其他()

其他事项:

  • typeof ctl.attr('mid') === "undefined"可以只是ctl.attr('mid') === undefined

Fiddle example

<强>更新即可。 通过使用其他function

来避免代码重复的第二个额外事项

Fiddle example

var ctl = $('#somecontrol');

var url = "/someuri/" +
        "?pid=" + ctl.attr('id') +
        "&m=" + formValue(ctl.attr('mid')) +
        "&u=" + formValue(ctl.attr('uid')) +
        "&dvalue=" + formValue(ctl.attr('value')) +
        "&dchoice=" + formValue(ctl.val());
alert(url);

function formValue(testValue)
{
    return (testValue === undefined ? "" : testValue);
}