jQuery链接函数和"这个":在这个例子中我的语法不正确?

时间:2015-07-21 23:06:35

标签: javascript jquery forms

以下是这种情况:

我有3 button s

<button type="button" class="job-update-button wp-core-ui button-primary" id="delete-btn">Remove</button>
<button type="button" class="job-update-button wp-core-ui button-primary" id="update-btn">Update</button>
<button type="button" class="job-update-button wp-core-ui button-primary" id="add-btn">Add</button>

input

<input type="hidden" name="jobAction" value="" />

value应与点击的id的{​​{1}}相关联。它可能看起来很愚蠢,但这是我整合页面逻辑的方式,这样服务器上的单个脚本就可以处理一堆相关的AJAX请求。

  • button点击了 - &gt; delete-btn获得jobAction
  • value
  • delete点击了 - &gt; update-btn获得jobAction
  • value
  • update点击了 - &gt; add-btn获得jobAction
  • value

我用于add事件的功能以

开头
click

我想弄清楚为什么我会

  

this.IndexOf不是函数。

我的想法是,当我调用jQuery('.job-update-button').click(function(){ // change the value of the memberAction hidden input based on which member-update-button was clicked jQuery('input[name="jobAction]"').val(jQuery(this).attr('id').substring(0, this.IndexOf('-'))); 时,this.IndexOf('-')引用调用this的对象,这是substring返回的字符串。

这是错的吗?如果是这样,你能帮我理解原因吗?是否有更有效和紧凑的方式来完成整个过程?

2 个答案:

答案 0 :(得分:-1)

你的Jquery函数搞砸了所有你需要的是:

$('.job-update-button').click(function(){
// change the value of the memberAction hidden input based on which member-update-button was clicked
    var id = $(this).attr('id');
    var value = id.replace("-", " ");

    $('input[name="jobAction"]').val(value);

})

对于初学者,您不需要调用jQuery,简写方式只是 $ 看起来你的代码中有一个 outta位置。改变这个:

'input[name="jobAction]"'

要:

'input[name="jobAction"]'

Working codepen example

请注意,而不是:

jQuery('.job-update-button').click(function(){}

我用过:

$('.job-update-button').click(function(){}

您可以每次调用jQuery,但 $ 更容易。

如果它不是你要找的东西,请告诉我,我会编辑或删除。

答案 1 :(得分:-1)

让我们将代码缩小一点以使其更清晰:

jQuery('.job-update-button').click( function(){

    var value = jQuery(this).attr('id').substring(0, this.IndexOf('-'));

    jQuery('input[name="jobAction"]').val( value );

});

在click事件处理程序中,this引用触发它的HTML元素。这就是jQuery内部工作的方式(当calling or applying函数时,您可以明确设置this或&#39;范围&#39;。

这意味着您正在尝试在HTML元素上调用indexOf(请注意正确的拼写),该元素没有indexOf方法。

另外,请注意,大多数人使用$简写为jQuery方法。

要修复您的代码,这可能就足够了:

$('.job-update-button').click( function(){

    $('input[name="jobAction"]').val( $(this).attr('id').replace(/-btn$/, '') );

});

在这里,我使用replace方法和Regular Expression来删除附加的&#39; -btn&#39; id的一部分。