【问题标题】:Why don't I see the .value property for my string in javascript?为什么我在 javascript 中看不到我的字符串的 .value 属性?
【发布时间】:2015-01-21 11:58:11
【问题描述】:

VS2013,MVC5,VB,在 Razor 视图中

我想为一个将被发送回控制器的字符串设置值。我对 javascript 很陌生,但我发现了这个 (link),其中包含以下代码:

<input type="text" id="mytext">

<script type="text/javascript">
  var elem = document.getElementById("mytext");
  elem.value = "My default value";
</script>

当我尝试输入时,上面“elem”上的“value”属性不可用。为什么会这样?

最终我正在尝试修改将返回给控制器的表单字段。虽然上面的问题是我想知道的,但我认为包含完整的上下文会很有用。

视图设置为:

@Using (Html.BeginForm(Nothing, Nothing, FormMethod.Post, New With {.id = "thisForm"}))

我的输入元素是:

<input type="button" onclick="UserCommit()" value="Next" class="btn btn-default" tabindex="2" />

脚本shell是:

<script type="text/javascript">
  function UserCommit() {
    $("#thisForm").submit()
  }
</script>

上面的脚本工作并提交与原始输入元素相同的表单:

<input type="submit" value="Next" class="btn btn-default" tabindex="2" />

我想将多个复选框字段的值组合到控制器期望返回的单个表单字段中,所以我想我可以使用 javascript 将所有选中的字段连接到期望字段中。但我似乎无法访问我上面链接到的 SO 帖子所建议的表单字段。

我当前的视图使用 html 帮助器并生成以下 html(这是查看生成的源代码):

<input id="Response1" name="Response1" type="checkbox" value="true" /><input name="Response1" type="hidden" value="false" /> one<br />
<input id="Response2" name="Response2" type="checkbox" value="true" /><input name="Response2" type="hidden" value="false" /> two<br />

预期的实际表单元素是“响应”,所以如果我连接 Response1 和 Response2 等等,无论创建和检查多少复选框,响应都会捕获数据。控制器期望看到“响应”,它是接收方法中的绑定字段。

这是我输入的:

<script type="text/javascript">
  function UserCommit() {
    var myElement = document.getElementById("Response");
    myElement.value = "A new response";
    $("#thisForm").submit()
  }
</script>

但是,上面看到的“.value”并没有出现在 Intellisense 中,当然也没有运行。

  • 在原帖后添加:

    我也确实找到了这个(link) SO 帖子,用于使用我将学习并尝试遵循的复选框助手。但是javascript问题仍然存在。

  • 为 cmets 中的 mplungjan 添加。这就是您要问的,生成“响应”字段的行吗?

    @Html.CheckBox("响应", False)

该行依次生成:

<input id="Response" name="Response" type="checkbox" value="true" /><input name="Response" type="hidden" value="false" />

【问题讨论】:

  • 切勿在提交事件中提交表单或单击提交按钮。 id="Response" 的字段在哪里?
  • 我在帖子正文中添加了我认为您在上面要求的行作为附加材料。我不确定我是否遵循强调的 NEVER。你说的是我使用的 javascript 提交,还是我使用的原始
  • 如果你想改变 html,使用 input.setAttribute("value", 123) 而不是 input.value=123;
  • 如果您也有多个 name=response,请从响应中更改 ID

标签: javascript asp.net-mvc razor


【解决方案1】:

您的 JS 代码在 JSFiddle 上测试时有效,因此这可能是 Intellisense 的错误或限制。尝试直接在 document.getElementById 上设置值,而不是先设置变量。

所以改变

  var elem = document.getElementById("mytext");
  elem.value = "My default value";

收件人:

 var elem = document.getElementById("mytext").value = "My default value";

或者,使用 jQuery:

$('#mytext').val("my default value");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多