在javascript函数中发送此参数

时间:2017-11-02 07:52:49

标签: javascript parameters this

我有以下复选框:

function checkOnlyOne(slno, this) { //Error here 
  console.log(this);
  //$('.serviceable_check_1').not(this).prop('checked', false);
  if(this.checked){
     $('.serviceable_check_1').not(this).prop('checked', false);
  }
}

javascript功能是:

Uncaught SyntaxError: Unexpected token this

我收到javascript错误onchange。如何发送此参数// tested class import B_Import from './b'; import C_Import from './c'; let B = B_Import; let C = C_Import; export function mock(B_Mock, C_Mock) { B = B_Mock || B_Import; C = C_Mock || C_Import; } export default class A { someFunction() { let instanceB = new B(); return instanceB.doSomething() .then(() => this.doSomethingElse()) .then((data) => { // async context, other tests will start before this. let instanceC = new C(data); }); } } // test import A, { mock as mockB } from './a'; setupMockB = (cfg, mockCallback) => { const ClassMock = class { constructor() { // use cfg } doSomething() {} } if(mockCallback) {mockCallback(ClassMock.prototype);} mockB(ClassMock, null) } describe('test', () => { afterEach(() => mockB()) it('case1', () => { a = new A(); setupMockB(cfg1, (mb) => sinon.stub(mb, 'doSomething').resolves()) return a.someFunction().then(() => { /* asserts1 */ }); }) it('case2', () => { a = new A(); setupMockB(cfg2, (mb) => sinon.stub(mb, 'doSomething').rejects()) return a.someFunction().then(() => { /* asserts2 */ }); }) }) 事件?

5 个答案:

答案 0 :(得分:1)

您的未提及任何内容。除非是对象或DOM的一部分,否则不能将 this 放在函数上。

您可以将 this 关键字放在将触发函数作为参数的元素上。然后在你的函数上,将参数变成一个变量,如chckbx或radiobtn,如果那些是你的元素

document.getElementById('mycheckbox').onchange = myFunction(this);

function myFunction(chckbx){
console.log(chckbx);
}

答案 1 :(得分:1)

见下面的代码段



function checkOnlyOne(slno, obj) { //Error here 
  console.log(obj);
  //$('.serviceable_check_1').not(this).prop('checked', false);
  if(obj.checked){
     $('.serviceable_check_1').not(obj).prop('checked', false);
  }
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="checkbox"><input type="checkbox" class="serviceable_check_1" id="serviceable1" name="condition_of_materials[]" onclick="checkOnlyOne(1,this); return false;" ><span> Serviceable</span></label>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你可以获得事件对象

可维修

function checkOnlyOne(slno, e {
    console.log(e.target);
    //$('.serviceable_check_1').not(e.target).prop('checked', false);
    if(this.checked)
        $('.serviceable_check_1').not(e.target).prop('checked', false);
}

e.target是您点击的元素

答案 3 :(得分:1)

你应该使用.call并传递obj作为第一个参数,将其用作this context

<input id="serviceable1" onclick="checkOnlyOne.call(obj, 1); return false;" ><span> Serviceable</span></label>

答案 4 :(得分:1)

首先是错误:你不能将参数命名为“this”,因为它是一个保留字。

现在,“this”指的是它的执行上下文,因此,onclick处理程序是元素的一个方法,因此在它的上下文(在我们的例子中是输入元素)中将会被删除。

注意片段中的第二个警告,您将看到onclick调用您从其正文中定义的函数,这意味着我们定义的此函数不是输入对象元素的方法,因此不会“附加”到它将从声明它的上下文(窗口对象)中调用。

var value = "I'm the value out of the input object";

function displayMessage(context){
  //we save the original context as arg
  alert("input's value: " + context.value);
  alert("the onclick handler:" + context.onclick);
  //but notic that the context has changed
  alert("the context in our function: " + this);
  alert("when trying without saving the previous context: " + this.value);

}
<input type="checkbox" id="subscribeToNews" value="Newsletter" onclick="displayMessage(this)"/>
<label for="subscribeToNews" >Subscribe </label>